我尝试在Android和OpenCV 2.4.4上使用mat.get(inx,int y)获取像素的RGB值。
Mat img = Utils.loadResource(getBaseContext(), R.drawable.ex3);
double[] tmp = img.get(100, 100);
if(printLog) Log.v(tag, "Color: "+ tmp[0] +","+ tmp[1] +","+ tmp[2] +"");
Normaly我得到了返回的tmp-Array。但在某些像素,我得到了返回“null”。 (这些点在图片的范围内!)
那么为什么我在一些坐标上得到一个数组,在另一些坐标上得到“null”以及如何修复它?
答案 0 :(得分:11)
在OpenCV中,通过使用Mat.get(row,col)获取pixelinformation,X和Y的含义发生了变化:使用Y表示行,使用X表示col。
Mat.get(Y, X);
所以在我的情况下,我超出范围,但openCV没有返回异常。它返回“null”
答案 1 :(得分:0)
我首先会检查Mat
与Mat::channels()
获得的频道数量,然后通过以下方式访问它们:
double [] tmp = img.at(100,100);
答案 2 :(得分:-1)
要分别访问每个像素,您可以执行此操作,如果您使用的是https://github.com/bytedeco/javacv
IplImage image = cvLoadImage("path/to/image/get.jpg");
public void colorProcess(IplImage image){
CvMat result = CvMat.create(image.width(),image.height(), CV_32F);
CvMat ff =image.asCvMat();
for(int a=0;a<result.cols();a++){
for(int b=0;b<result.rows();b++){
CvScalar rgb = cvGet2D(ff, a, b);
System.out.println("blue "+rgb.getVal(0)+"green "+rgb.getVal(1)+"red "+rgb.getVal(2));
}
}
}