OpenCV java获取像素颜色

时间:2013-06-10 21:06:31

标签: java opencv

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

2 个答案:

答案 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);    

     }
 }

请注意,picdataint上的数组,但代码中的其他数组是byte的数组。你有意这么做吗?