2

我制作了以下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?

4

2 回答 2

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

     }
 }
于 2013-06-11T19:49:48.287 回答
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. 你是故意的吗?

于 2013-06-10T23:10:18.340 回答