Я выполняю обнаружение изображения, которое мне нужно обработать для каждого красного, зеленого и синего элемента, чтобы получить карту краев (бинарное изображение в черно-белой форме) и объединить их в одно, чтобы показать результат. После того, как я извлек элемент каждого красного, зеленого и синего и установил пороговое значение для получения бинарного изображения, оно не показывает бинарное изображение. Вместо этого он показывает мне изображение в градациях серого. Кто-нибудь, пожалуйста, будьте любезны, чтобы помочь мне? Вот мой код до сих пор.
Buffered Image buff_red;
int[] process_red;
int width = 256;
int height = 256;
private void processActionPerformed(java.awt.event.ActionEvent evt) {
width = inputimage.getWidth(null);
height = inputimage.getHeight(null);
buff_red = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics r = buff_red.getGraphics();
r.drawImage(inputimage, 0, 0, null);
r.dispose();
//get the red element
process_red = new int[width * height];
counter = 0;
for(int i = 0; i < 256; i++) {
for(int j = 0; j < 256; j++) {
int clr = buff_red.getRGB(j, i);
int red = (clr & 0x00ff0000) >> 16;
red = (0xFF<<24)|(red<<16)|(red<<8)|red;
process_red[counter] = red;
counter++;
}
}
//set threshold value for red element
int threshold = 100;
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int bin = (buff_red.getRGB(x, y) & 0x000000ff);
if (bin < threshold)
bin = 0;
else
bin = 255;
buff_red.setRGB(x,y, 0xff000000 | bin << 16 | bin << 8 | bin);
}
}
Обновлять:
Инициализация buff_red
была выполнена до "получения красного элемента" (первый цикл), а именно:
buff_red = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics r = buff_red.getGraphics();
r.drawImage(inputimage, 0, 0, null);
Должен ли я буферизовать изображение из process_red
и использовать его для метода пороговой обработки, чтобы я мог получить карту границ?