我有一个未解决的问题,但是我找不到与我的问题完全相似的问题,所以我来了。
我想知道某些算法(/或现有插件)是否能够检测到中间的蓝光的存在(图像1)或不存在(图像2)图像?
我的主要技能是PHP和Javascript,但如果有必要,我也可以使用Java,如果没有别的办法,我甚至可以使用其他语言......
任何帮助,即使是向我指出正确方向的任何帮助都表示赞赏。
答案 0 :(得分:3)
您可以直接从命令行使用ImageMagick执行非常基本的操作,而无需任何代码。它安装在大多数Linux发行版上,可用于OSX和Windows。
基本上,你会寻找蓝色通道远大于红色或绿色通道以及饱和度高的像素。你可以这样做:
convert on.jpg -fx "u.b>(u.g+0.2) && u.b>(u.r+0.2) && saturation>0.6" result.png
而当你为off
图片运行时:
convert off.jpg -fx "u.b>(u.g+0.2)&&u.b>(u.r+0.2)&&saturation>0.6" result.png
您可以像这样计算上面图像中的白色像素:
convert result.png -format "%[fx:mean*w*h]" info:
1227
所以on
图片中有1227个像素被识别为亮蓝色,而off
图像中有26个像素被识别出来。
您可以测试两个图像,而无需创建我在上面创建的中间输出文件:
convert off.jpg -fx "u.b>(u.g+0.2)&&u.b>(u.r+0.2)&&saturation>0.6" -format "%[fx:mean*w*h]" info:
26
convert on.jpg -fx "u.b>(u.g+0.2)&&u.b>(u.r+0.2)&&saturation>0.6" -format "%[fx:mean*w*h]" info:
1227
当然,您可能想要尝试使用我建议的数字。
另请注意,ImageMagick中有C,C ++,C#,PHP,Perl,Javascript,Ruby和其他绑定 - 因此您可以在任何语言中完全使用上述所有内容。或者只是exec()
或system()
上面的内容。