gpt4 book ai didi

c++ - opencv连接细线

转载 作者:行者123 更新时间:2023-12-02 17:01:22 25 4
gpt4 key购买 nike

我有一张带线条的黑白图像。然而,其中一些线并没有完全连接到它们应该在的位置(尽管它们很接近)我附上了一个例子。 open

我想让线条接近 1px 厚。我一直在玩一些想法,但没有太多成功。我尝试过扩张色情,并像这样扩张:

int dsize = 5;
cv::Mat element = getStructuringElement(cv::MORPH_CROSS,
cv::Size(2*dsize + 1, 2*dsize + 1),
cv::Point( dsize, dsize ) );
cv::dilate( src, src, element );

有没有更好的方法,就像 op[p[osed 只是扩张和侵 eclipse 来专门做我所追求的?

最佳答案

我们至少可以尝试几种解决方案,但我需要有关您的问题的更多信息。例如,您是否试图关闭检测到的对象的(不)完整轮廓?您愿意采取多少“轮廓退化”来近似完全闭合的轮廓?

这是第一个也是非常基本的解决方案,假设您需要 1 pixel宽度轮廓。涉及dilating图片 N次,然后应用 thinning/skeletonize转型。 (该函数是 OpenCV 的 Extended Image Processing 模块的一部分)。

让我们看看代码:

#include <opencv2/ximgproc.hpp>

//Read input image:
std::string imagePath = "C://opencvImages//lineImg.png";
cv::Mat imageInput= cv::imread( imagePath );

//Convert it to grayscale:
cv::Mat grayImg;
cv::cvtColor( imageInput, grayImg, cv::COLOR_BGR2GRAY );

//Get binary image via Otsu:
cv::threshold( grayImg, grayImg, 0, 255 , cv::THRESH_OTSU );

//Dilate the binary image with 5 iterations:
cv::Mat morphKernel = cv::getStructuringElement( cv::MORPH_RECT, cv::Size(3, 3) );
int morphIterations = 5;
cv::morphologyEx( grayImg, grayImg, cv::MORPH_DILATE, morphKernel, cv::Point(-1,-1), morphIterations );

这是放大的图像:

enter image description here
//Get the skeleton:
cv::Mat skel;
int algorithmType = 1;
cv::ximgproc::thinning( grayImg, skel, algorithmType );

这是骨架图像。该线已被“细化”回 1 像素的宽度:

enter image description here

我不知道这对您的应用程序是否足够好,但是,正如我所说,根据您在做什么,我们可以尝试几种替代解决方案。

关于c++ - opencv连接细线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60920611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com