ImageJ编程:获取坐标和颜色

1,672 阅读1分钟

虽然在ImageJ状态栏中会直接显示当前鼠标所在图像的位置以及颜色信息,当如果要基于这些信息进行许多后续操作,我们就需要提取这些信息。为此,可以使用下面这段ImageJ Macro(一些built-in的函数,可以访问ImageJ的Documentation)。

function getClickLoc(){
    // 鼠标单击图像上某个点,即返回其坐标
    // 注意如果多次调用该函数,中间需要时间间隔,可以使用wait(n)函数。
    leftButton = 16;
    flags = 0;
    while(flags&leftButton == 0) getCursorLoc(x,y,z,flags);
    return newArray(x,y);
}

function getRGB(loc){
    // loc是一个二元Array, (x,y)
    // 返回RGB为一个三元Array, (r,g,b)
	RGB = newArray(3);
	x = loc[0]; y = loc[1];
	v = getPixel(x,y);
	RGB[0] = (v>>16)&0xff;  // extract red byte (bits 23-17)
	RGB[1] = (v>>8)&0xff; // extract green byte (bits 15-8)
	RGB[2] = v&0xff;       // extract blue byte (bits 7-0)
	return RGB;
}

function main(){
    waitForUser("请点击图像中任意处获取坐标和颜色信息!");
    loc = getClickLoc();
    rgb = getRGB(loc);
    // 接下来可以把结果打印到Log窗口
    print('X,Y,R,G,B');
    print(""+loc[0]+","+loc[1]+","+rgb[0]+","+rgb[1]+","+rgb[2]);
}

// 执行main()主题过程
main();

运行结果如下:

Log窗口的内容可以点击File另存为csv格式文件进行记录,或者直接粘贴内容到excel中进行处理。

当然了,也可以自动化获取一些对象的某些坐标,这个后面再说吧!