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

发布于 2025-01-06 13:24:01 字数 614 浏览 1 评论 0原文

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

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

You guys know how to detect/return the points of all black/grayish element in an image?
If possible, please include any tutorial codes for me.

Edit: I've made a thresholded image from the source "img". and I'm trying to make all the colored pixel into white.

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
    }
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蘑菇王子 2025-01-13 13:24:01

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

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

然后您将得到一张仅包含灰度像素的图像。

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

Assuming the input image is in 24 bit format i.e. R G B then a pixel is greyscale if all three values (R G and B) are the same.

So loop through the image, check if the current pixel's R, G and B elements have the same value and if they don't then set the pixel to white.

You will then be left with an image with just the greyscale pixels.

If you want just dark grey pixels, then when you check to see if RGB values are the same you can do a second check to see if the value is less than say 127 (or whatever you want the threshold to be).

情绪 2025-01-13 13:24:01
  1. 首先将彩色图像转换为灰度图像,前提是您的图像是 RGB

    cvtColor(im_rgb,im_gray,CV_RGB2GRAY);

  2. 使用阈值(例如 127)将图像转换为二进制

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

  1. Convert the color image into gray image first by the following, provided your image is RGB

    cvtColor(im_rgb,im_gray,CV_RGB2GRAY);

  2. Convert the image into binary using your threshold, say 127

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文