gpt4 book ai didi

c++ - 从 Canny 检测和标记端点

转载 作者:行者123 更新时间:2023-11-28 02:16:05 28 4
gpt4 key购买 nike

我想从 canny edge map 中找到并标记端点。

我试图通过只与一个邻居查看点来自己做,但此时的结果很奇怪。

OpenCV 中有查找端点的函数吗?

来自原始 Canny 的样本:

放大示例:

代码:

int neighbors;
for(int i = 1; i < (image.rows)-1; i++)
{
for(int j = 1; j < (image.cols)-1; j++)
{
if( image.at<uchar>(i, j) == 255 )
{
neighbors = 0;
for(int vx = i-1; vx <= i+1; vx++)
{
for(int vy = j-1; vy <= j+1; vy++)
{
if(vx == i && vy == j)
{
continue;
}
else
{
if( image.at<uchar>(vx, vy) == 255 )
{
neighbors++;
}
}
}
}
if(neighbors == 1)
{
image.at<uchar>(i, j) = 80;
}
}
}
}

最佳答案

您只是覆盖了您的输入数据,但您的邻里评估采用了原始值。因此,您询问邻居是否具有值 255,但在此之前您可能已经将邻居像素值更改为 80。

试试这个:

int main()
{
cv::Mat input = cv::Mat::zeros(64,64,CV_8UC1);

cv::line(input, cv::Point(15,15), cv::Point(50,50), cv::Scalar(255));
cv::line(input, cv::Point(50,15), cv::Point(15,50), cv::Scalar(255));

cv::line(input, cv::Point(15,25), cv::Point(25,15), cv::Scalar(255));

cv::line(input, cv::Point(15,15), cv::Point(10,15), cv::Scalar(255));
cv::line(input, cv::Point(15,15), cv::Point(15,10), cv::Scalar(255));


cv::Mat image = input.clone();

cv::Mat output;
cv::cvtColor(input, output, CV_GRAY2BGR);

int neighbors;

for(int i = 1; i < (image.rows)-1; i++)
{
for(int j = 1; j < (image.cols)-1; j++)
{

if( image.at<uchar>(i, j) != 0 )
{
neighbors = 0;

for(int vy = i-1; vy <= i+1; vy++)
{
for(int vx = j-1; vx <= j+1; vx++)
{
if(vy == i && vx == j)
{
continue;
}
else
{
if( image.at<uchar>(vy, vx) != 0 )
{
neighbors++;
}
}
}
}

if(neighbors == 1)
{
image.at<uchar>(i, j) = 80;
output.at<cv::Vec3b>(i, j) = cv::Vec3b(0,0,255);
}
}
}
}


//cv::resize(image, image, cv::Size(1024, 1024), CV_INTER_NN);

cv::imshow("input", input);
cv::imshow("output", output);
cv::waitKey(0);

}

这会生成这张图片:

enter image description here

并输出此图像(端点标记为红色):

enter image description here

此处调整大小:

enter image description here

我还更改了具有误导性的 vxvy 的命名。

关于c++ - 从 Canny 检测和标记端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34011106/

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