image-processing - 在 OpenCV 中应用形态学时,SetROI 是否有效?

我正在尝试仅将形态关闭操作应用于 nxn (i,j) 处像素的邻域。最简单的方法似乎是创建 CvRectcvRect(j-n,i-n,j+n,i+n) ,将图像的 ROI 设置为该值,然后应用形态学。

但是,结果与将 Morphology 应用于整个图像相同,而无需设置 ROI。我在这里做错了什么?

最佳答案

我没有尝试使用 C 接口(interface)执行此操作,但这是我使用 C++ 接口(interface)执行此操作的方式:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#include <vector>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char* argv[])
{
    Mat spots = imread("roi.png", 0);

    Rect ulRoi(0, 0, spots.cols >> 1, spots.rows >> 1);
    Mat opening(spots, ulRoi);

    Mat element = getStructuringElement(MORPH_RECT, Size(7, 7));
    morphologyEx(opening, opening, MORPH_OPEN, element);

    imshow("opening", opening);
    imshow("spots", spots);
    waitKey();

    return 0;
}

我基本上只是设计了一个图像,然后才摆脱了左上象限的“噪音”光环。我的“噪音”点只有 5x5,所以我将形态内核设为 7x7 以消除噪音。

这是输入图像:


在形态学打开后,我得到以下信息:


希望这会帮助你!

https://stackoverflow.com/questions/8612003/

相关文章:

image - 颜色键在图像处理中的作用是什么?

json - 在 Docker 中将 JSON 文件作为环境变量传递

opencv - 延迟使用OpenCv播放AVI

opencv - 用opencv实现消失点算法

visual-c++ - MS Visual Studio 10上的OpenCV:cv::cvtCo

docker - 如何使用非 root 用户权限构建 docker 以使用 pipenv 设置 py

python - 用Python捕捉 Action

opencv - OpenCV || matchShapes findContours断言失败

opencv - mac上opencv2.3.1中 undefined symbol ,cvSmoo

opencv - OpenCV中两个矩阵的广义特征值