检测OpenCV中的黑色/灰色元素

时间:2012-02-17 12:16:16

标签: c++ opencv computer-vision pixel

你们知道如何检测/返回图像中所有黑/灰元素的点吗? 如果可能,请为我提供任何教程代码。

编辑:我已经从源“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
    }
  }
}

2 个答案:

答案 0 :(得分:2)

假设输入图像为24位格式,即R G B,则如果所有三个值(R G和B)相同,则像素为灰度。

因此,在图像中循环,检查当前像素的R,G和B元素是否具有相同的值,如果不是,则将像素设置为白色。

然后,您将看到仅包含灰度像素的图像。

如果您只想要深灰色像素,那么当您检查RGB值是否相同时,您可以进行第二次检查以查看该值是否小于127(或您想要的阈值)。

答案 1 :(得分:-2)

  1. 如果图像为RGB

    ,请首先将彩色图像转换为灰色图像

    cvtColor(im_rgb,im_gray,CV_RGB2GRAY);

  2. 使用您的阈值将图像转换为二进制,例如127

    cvThreshold(im_gray,im_bw,127,255,CV_THRESH_BINARY);