gpt4 book ai didi

c++ - Canny 边算法只需要一条边

转载 作者:可可西里 更新时间:2023-11-01 18:39:15 27 4
gpt4 key购买 nike

当我使用 canny edge 算法时,它会按预期产生与粗彩色线相对的 2 条边,但我只想显示一条边,以使我的直线和曲线检测算法更简单,关于我怎样才能做到这一点?

enter image description here

代码如下:

bool CannyEdgeDetection(DataStructure& col)
{

Mat src, src_gray;
Mat dst, detected_edges, fin;
int WhiteCount = 0, BCount = 0;

char szFil1[32] = "ocv.bmp";
char szFil2[32] = "dst.bmp";
src = imread(szFil1);
dst = imread(szFil1);
blur( src_gray, detected_edges, Size(3,3) );
Canny( src, dst, 100, 200, 3 );
imwrite(szFil2, dst );

IplImage* img = cvLoadImage(szFil2);
int height = img->height;
int width = img->width;
int step = img->widthStep;
int channels = img->nChannels;
uchar * datau = (uchar *)img->imageData;

for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
for(int k=0;k<channels;k++){
datau[i*step+j*channels+k] = 255 - datau[i*step+j*channels+k];
if (datau[i*step+j*channels+k]==0){
WhiteCount++;
col.pixel_col [i][j] = 2;
}
else{BCount++;
col.pixel_col[i][j] = 0;
}
}
}
}

cvSaveImage("img.bmp" ,img);

return 0;

}

这不是原始图像,但相似:

enter image description here

我要注释掉哪一部分才能在白色背景下读取黑色图像?或任何彩色图像?

bool done;
do
{
cv::morphologyEx(img, temp, cv::MORPH_OPEN, element);
cv::bitwise_not(temp, temp);
cv::bitwise_and(img, temp, temp);
cv::bitwise_or(skel, temp, skel);
cv::erode(img, img, element);

double max;
cv::minMaxLoc(img, 0, &max);
done = (max == 0);
} while (!done);

最佳答案

该过程称为骨架化细化。你可以用谷歌搜索。

这是一个骨架化的简单方法:skeletonization OpenCV In C#

下面是我将上述方法应用于您的图像时得到的输出(Image is inverted before skeletonization because above method work for white images in black background,与输入图像的大小写相反)。

enter image description here

关于c++ - Canny 边算法只需要一条边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11492533/

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