你们知道如何检测/返回图像中所有黑/灰元素的点吗? 如果可能,请为我提供任何教程代码。
编辑:我已经从源“img”制作了一个阈值图像。而我正在尝试将所有彩色像素变成白色。
for(x=0; x<img->width; x++) {
for(y=0;y<img->height; y++) {
uchar* temp_ptr = &((uchar*)(img_result_threshold->imageData + img_result_threshold->widthStep*y))[x];
s = cvGet2D(img_hsv, y, x);
if(s.val[1] >= 100 && s.val[2] >= 100) {
temp_ptr[0]=255; //White to greater of threshold
printf("Point(%d, %d) = (%.1f, %.1f, %.1f)\n", x, y, s.val[0], s.val[1], s.val[2]);
} else {
temp_ptr[0]=0; //Black other
}
}
}
答案 0 :(得分:2)
假设输入图像为24位格式,即R G B,则如果所有三个值(R G和B)相同,则像素为灰度。
因此,在图像中循环,检查当前像素的R,G和B元素是否具有相同的值,如果不是,则将像素设置为白色。
然后,您将看到仅包含灰度像素的图像。
如果您只想要深灰色像素,那么当您检查RGB值是否相同时,您可以进行第二次检查以查看该值是否小于127(或您想要的阈值)。
答案 1 :(得分:-2)
如果图像为RGB
,请首先将彩色图像转换为灰色图像cvtColor(im_rgb,im_gray,CV_RGB2GRAY);
使用您的阈值将图像转换为二进制,例如127
cvThreshold(im_gray,im_bw,127,255,CV_THRESH_BINARY);