用于C++中图像分析的OpenCV二进制图像掩码

MST*_*TTm 7 c++ opencv mask image-processing threshold

我试图分析一些图像外部有很多噪点的图像,但是内部有一个形状清晰的圆形中心.中心是我感兴趣的部分,但外部噪声正在影响我对图像的二进制阈值处理.

为了忽略噪声,我试图设置一个已知中心位置和半径的圆形掩模,这个圆圈外的所有像素都变为黑色.我认为圆圈内的所有内容现在都可以通过二进制阈值分析来轻松分析.

我只是想知道是否有人能够指出我正确的方向来解决这类问题吗?我已经看过这个解决方案了:如何在Open CV中消除圆圈外的所有内容,但是我的一些约束是不同的,我对加载源图像的方法感到困惑.

先感谢您!

Der*_*man 23

//First load your source image, here load as gray scale
cv::Mat srcImage = cv::imread("sourceImage.jpg", CV_LOAD_IMAGE_GRAYSCALE);

//Then define your mask image
cv::Mat mask = cv::Mat::zeros(srcImage.size(), srcImage.type());

//Define your destination image
cv::Mat dstImage = cv::Mat::zeros(srcImage.size(), srcImage.type());    

//I assume you want to draw the circle at the center of your image, with a radius of 50
cv::circle(mask, cv::Point(mask.rows/2, mask.cols/2), 50, cv::Scalar(255, 0, 0), -1, 8, 0);

//Now you can copy your source image to destination image with masking
srcImage.copyTo(dstImage, mask);
Run Code Online (Sandbox Code Playgroud)

然后对你的进一步处理dstImage.假设这是您的源图像:

在此输入图像描述

然后上面的代码将此作为灰度输入:

在此输入图像描述

这是你创建的二进制掩码:

在此输入图像描述

这是掩蔽操作后的最终结果:

在此输入图像描述