我制作了以下Java程序:
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat image = Highgui.imread("lena.png");
Imgproc.cvtColor(image, image, Imgproc.COLOR_BGR2GRAY);
byte buff[] = new byte[ (int) (image.total() * image.channels())];
int a;
int b;
int picdata[][] = new int[10][10] ;
for (a=0 ; a<10;a++){
for (b=0 ; b<10;b++){
picdata[a][b]= image.get(a, b,buff);
}
}
当我看到picdata时,我会收到一个数字:
"picdata" (id=24)
[0] (id=25)
[0] 225
[1] 224
[2] 223
[3] 222
[4] 221
[1] (id=27)
[0] 210
[1] 209
[2] 208
............
如果我检查image.get(x,y)
,我会收到所需的号码(介于0到255之间),但我不知道如何将其写入picdata。
如何更改代码以使用灰度数据填充picdata?
答案 0 :(得分:2)
问题终于通过以下方式解决:
byte buff[] = new byte[ (int) (image.total() * image.channels())];
int a;
int b;
double picdata[][] = new double[10][10] ;
double[] temp;
for (a=0 ; a<10;a++){
for (b=0 ; b<10;b++){
temp= image.get(a, b);
picdata[a][b]=temp[0];
}
}
答案 1 :(得分:1)
我没有在Java中使用OpenCV的经验,但这段代码应该可以正常工作:
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat image = Highgui.imread("lena.png");
Imgproc.cvtColor(image, image, Imgproc.COLOR_BGR2GRAY);
int a;
int b;
int picdata[][] = new int[10][10] ;
for (a=0 ; a<10;a++){
for (b=0 ; b<10;b++){
picdata[a][b]= (int) image.get(a, b);
}
}
请注意,picdata
是int
上的数组,但代码中的其他数组是byte
的数组。你有意这么做吗?