2015-02-06 62 views
0

我目前正在研究一段使用OpenCV將圖像變成灰度的代碼。我已經成功地把圖像的黑色和白色,因爲我想,用下面的代碼:爲什麼我的get()方法失敗了這個函數?

public static void Greyscale() { 

    Mat inputImage = Highgui.imread("files/lena.png"); 
    Mat greyImage = new Mat(); 
    Imshow ims4 = new Imshow("Grey Image"); 
    Imgproc.cvtColor(inputImage, greyImage, Imgproc.COLOR_BGR2GRAY); 

    ims4.showImage(greyImage); 

不過,我現在要運行一些特定的像素的get()方法,以確保所有的BGR值相等。然而,這不工作:

double[] bgr = greyImage.get(0, 0); 
System.out.println("colour @ (0,0) = B: " + bgr[0] + " G: " + bgr[1] + " R: " + bgr[2]); 

運行上述代碼導致錯誤「在線程異常‘等的消息主要’java.lang.ArrayIndexOutOfBoundsException:1 在ColourQuery.Greyscale(ColourQuery.java:129) (ColourQuery.java:67)「 」(ColourQuery.java:67)「

任何人都可以指出我在哪裏出錯了這段代碼?它的工作的時候它不灰度圖圖像...

+0

什麼是'greyImage'的大小?你有什麼事嗎? – 2015-02-06 18:10:54

+0

灰度圖像中有多少個通道?再看一遍.. – berak 2015-02-06 18:11:20

+0

它與input()代碼工作的inputImage尺寸相同。 – Zetland 2015-02-06 18:11:36

回答

1

不是所有的圖像具有相同的通道數,也許你需要一個條件:

double[] pixel = img.get(0, 0); 
switch(img.channels()) { 
    case 1: // grayscale, luminance only 
     System.out.println("colour @ (0,0) = L: " + pixel[0]); 
     break; 
    case 3: // bgr 
     System.out.println("colour @ (0,0) = B: " + pixel[0] + " G: " + pixel[1] + " R: " + pixel[3]); 
     break; 
    case 4: // bgra 
     System.out.println("colour @ (0,0) = B: " + pixel[0] + " G: " + pixel[1] + " R: " + pixel[3]+ " A: " + pixel[3]); 
     break; 
}