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数据类型指针ptr的使用

常用形式:

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

对于Mat的ptr函数,返回的是<>中的模板类型指针,指向的是()中的第row行的起点,通常<>中的类型和Mat的元素类型应该一致
然后再用该指针去访问对应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;
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容