我有opencv c ++的图像处理程序。 inmy程序的两个预处理路径是2种灰度图像和彩色图像。 但有时我得到的图像是灰度级,但以RGB格式存储意味着当外观图像为灰色但该图像有3个通道。
我如何检测rgb图像格式是真的有色还是灰色?
答案 0 :(得分:6)
您可以浏览像素并检查每次R,G和B的值是否相同。
cv::Mat image; // your image with type CV_8UC3
bool grayscale = true;
for(int i = 0; i < image.rows; i++) {
cv::Vec3b* ptr = image.ptr<cv::Vec3b>(i);
for(int j = 0; j < image.cols; j++) {
if(!(ptr[j][0] == ptr[j][1] && ptr[j][0] == ptr[j][2])) {
grayscale = false;
break;
}
}
if(!grayscale)
break;
}
答案 1 :(得分:2)
几乎所有颜色的灰色都有red == green == blue
。只需检查红色绿色和蓝色值是+10 or -10
就可以了。
如果您希望使用特定形式的灰色,可以查看this website以查看可以在RGB输入门户上形成的灰色的相关颜色。