0

我需要比较颜色。我想将颜色设置为变量,然后将其与使用 getPixel 获得的值进行比较。

但是,以下不起作用。似乎 ImageJ 不知道 basecolor 中的值是一种颜色。

  basecolor = 0xFFFFFF;
  rightpixel = getPixel(x, y);
  if (rightpixel == basecolor)  count++;   
4

1 回答 1

0

您的问题出在 getPixel 中,它不会产生以十六进制编写的颜色。我在 ImageJ 上向您介绍您最好的朋友:内置宏函数代码 https://imagej.nih.gov/ij/developer/macro/functions.html ,其中记录了内置像素函数,例如 getPixel()。

对于 getPixel(),声明“注意 RGB 图像中的像素包含需要使用移位和遮罩提取的红色、绿色和蓝色分量。请参阅颜色选择器工具宏以获取显示如何执行此操作的示例。”,颜色选择器工具宏告诉我们如何从颜色“位”到 RGB。

因此,如果您想比较颜色,请执行以下操作:

basecolor=newArray(0,0,0);
rightpixel = getPixel(x,y);

//from the Color Picker Tool macro
//converts what getPixel returns into RGB (values red, green and blue)
if (bitDepth==24) {
    red = (v>>16)&0xff;  // extract red byte (bits 23-17)
    green = (v>>8)&0xff; // extract green byte (bits 15-8)
    blue = v&0xff;       // extract blue byte (bits 7-0)
}

//compare the color with your color
if(red==basecolor[0] && green==basecolor[1] && blue==basecolor[2]){
    print("Same Color");
    count++;
}

//you can also work with hex by converting the rgb to hex and then 
//comparing the strings like you did
于 2016-12-07T12:25:50.950 回答