Mat data operation in jni and java

Returning Mat object from native code to java in OpenCV

in C++:

jlong funC(){
Mat *mat = new Mat();
    //...
    return (jlong)mat;
}

in java:

long = addr;// addr is return from c method funC()
Mat mat = new Mat(addr);

OpenCV Mat數(shù)據(jù)類型指針ptr的使用

常用形式:

mat.ptr<type>(row)[col]

對于Mat的ptr函數(shù),返回的是<>中的模板類型指針,指向的是()中的第row行的起點(diǎn),通常<>中的類型和Mat的元素類型應(yīng)該一致
然后再用該指針去訪問對應(yīng)col列位置的元素

單通道

cv::Mat image = cv::Mat(400, 600, CV_8UC1); //定義了一個Mat變量image。
uchar * data00 = image.ptr<uchar>(0); //data00是指向image第一行第一個元素的指針。
uchar * data10 = image.ptr<uchar>(1); //data10是指向image第二行第一個元素的指針。
uchar * data01 = image.ptr<uchar>(0)[1];//data01是指向image第一行第二個元素的指針。

多通道

cv::Mat image = cv::Mat(400, 600, CV_8UC3); //寬400,長600,3通道彩色圖片
cv::Vec3b * data000 = image.ptr<cv::Vec3b>(0);
cv::Vec3b * data100 = image.ptr<cv::Vec3b>(1);
cv::Vec3b * data001 = image.ptr<cv::Vec3b>(0)[1];
cv::Vec3b * data

jni層簡單打印

for (int i=0;i<grey.rows;i++)
    {

        for (int j=0;j<grey.cols*grey.channels();j++)
        {
            //double ImgPixelVal = cvGetReal2D( grey, i, j );
            LOGD("print src img:%d",grey.ptr<int>(i)[j]);
           // cout<<src.ptr(j)<<endl;
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容