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;
}
}