сканирование пикселей изображения .tiff с использованием библиотеки imageJ - PullRequest
1 голос
/ 07 февраля 2012

я использую библиотеку imageJ для чтения файла изображения .tiff.Но когда я пытаюсь прочитать пиксели изображения image1 в переменной c, я получаю сообщение об ошибке «несовместимые типы: Требуется int, найдено int []. Я новичок в Java, поэтому кто-то может сказать мне, как обойти эту проблему.в противном случае код работает нормально с другими форматами изображений.

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.imageio.ImageIO;
import ij.ImagePlus;

public class GetPixelCoordinates {

//int y, x, tofind, col;
/**
 * @param args the command line arguments
 * @throws IOException  
 */
    public static void main(String args[]) throws IOException {
        try {
            //read image file

            ImagePlus img = new ImagePlus("E:\\abc.tiff");

            //write file
            FileWriter fstream = new FileWriter("E:\\log.txt");
            BufferedWriter out = new BufferedWriter(fstream);

            //find cyan pixels
            for (int y = 0; y < img.getHeight(); y++) {
                for (int x = 0; x < image.getWidth(); x++) {

                    int c = img.getPixel(x,y);
                    Color color = new Color(c);


                     if (color.getRed() < 30 && color.getGreen() >= 225 && color.getBlue() >= 225) {
                         out.write("CyanPixel found at=" + x + "," + y);
                         out.newLine();

                     }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

1 Ответ

1 голос
/ 07 февраля 2012

Если вы посмотрите документацию для getPixel(int,int) в ImagePlus, вы увидите, что она возвращает массив int с, а не один int:

Возвращает значение пикселя в точке (x, y) как массив из 4 элементов. Значения градаций серого перенастраиваются в первом элементе. Значения RGB возвращаются в первых 3 элементах. Для индексированных цветных изображений значения RGB возвращаются в первых трех трех элементах, а индекс (0-255) возвращается в последнем.

Похоже, что вы имеете дело с RGB-изображением, поэтому вместо этого вы должны сделать следующее:

int [] colorArray = image1.getPixel(x,y);

int redValue = colorArray[0];
int greenValue = colorArray[1];
int blueValue = colorArray[2];
...