c++ - 我想删除背景(就像黑环)

标签 c++ opencv image-processing

这是我使用的图像。 (视网膜血管,DRIVE 数据库)

Screenshot

首先,它通过一个预处理过程。 预处理过程如下。

  1. 应用高斯滤波器去除噪声。 (并绘制 BGR 直方图)

    cv::GaussianBlur(gassimg, gassimg, cv::Size(3,3),1.0, 1.0);
    
  2. 背景被平均值替换并设置阈值。 (距离中心50*50大小的区域)

    for (int y = imgrow/2 -25; y < imgrow/2 +25; ++y) {
    for (int x = imgcol/2 -25; x < imgcol/2 +25; ++x) {
        b += tempimg.at<cv::Vec3b>(y, x)[0];
        g += tempimg.at<cv::Vec3b>(y, x)[1];
        r += tempimg.at<cv::Vec3b>(y, x)[2];
        }
    }
    r = r / (2500);
    g = g / (2500);
    b = b / (2500);
    
    for (int y = 0; y < tempimg.rows; ++y) {
    for (int x = 0; x < tempimg.cols; ++x) { 
        if ((tempimg.at<cv::Vec3b>(y, x)[0] <=30) || tempimg.at<cv::Vec3b>(y, x)[1] <= 30 || tempimg.at<cv::Vec3b>(y, x)[2] <= 30)
        {
            tempimg.at<cv::Vec3b>(y, x)[2] = r;
            tempimg.at<cv::Vec3b>(y, x)[1] = g;
            tempimg.at<cv::Vec3b>(y, x)[0] = b;
        }
    }
    

结果如下。 enter image description here

这张图片有一个问题。 (如蓝色-圆圈)

边缘已制成。

enter image description here

我想去除边缘。 (像黑环) 我该怎么办?

最佳答案

用圆霍夫变换检测大圆,然后将大圆外的像素强制归零,即可去除圆环。

sample picture

关于c++ - 我想删除背景(就像黑环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48615558/

相关文章:

c++ - 磁盘结构元素opencv vs Matlab

c++ - finally函数依赖RVO

.net - 如何设置嵌套库依赖?

c++ - opencv kmeans聚类多个Mats

c - 函数cvShowImage使程序崩溃。为什么?开放式CV

iphone - 如何在 iOS 上检测图像中的向上箭头?

c++ - 在 Windows 上执行流程并获取结果

c++ - 使用 dlsym 导入的函数中的参数位置错误

python - 将 MatplotLib 或自定义颜色图应用于 OpenCV 图像

image-processing - 使图像中的文本更薄以用于 OCR