2015-02-06 2 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) at ColourQuery.main (ColourQuery.java:67) "

Может ли кто-нибудь указать, где я ошибаюсь в этом коде? Он работал на изображении, когда он не был Greyscale ...

+0

Каков размер 'greyImage'? У вас что-нибудь есть? –

+0

Сколько каналов в полутонах? посмотрите на это снова .. – berak

+0

Это тот же размер, что и inputImage, с которым работал код get(). – Zetland

ответ

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; 
} 
Смежные вопросы