gpt4 book ai didi

c++ - OpenCV 洪水填充卡边缘

转载 作者:行者123 更新时间:2023-11-28 00:31:55 25 4
gpt4 key购买 nike

我正在使用此代码尝试在图像中找到卡片的边缘。当我运行它时,它只勾勒出卡片边缘的一半。

这是我取回的图像示例。

enter image description here

cvtColor(Img, bw, CV_RGB2GRAY);
Mat outerBox = Mat(bw.size(), CV_8UC1);
GaussianBlur(bw, bw, cv::Size(11,11), 0);
adaptiveThreshold(bw, outerBox, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 5, 2);
bitwise_not(outerBox, outerBox);
Mat kernel = (Mat_<uchar>(3,3) << 0,1,0,1,1,1,0,1,0);
dilate(outerBox, outerBox, kernel);

int count=0;
int max=-1;
cv::Point maxPt;

for(int y=0;y<outerBox.size().height;y++)
{
uchar *row = outerBox.ptr(y);
for(int x=0;x<outerBox.size().width;x++)
{
if(row[x]>=128)
{
int area = floodFill(outerBox, cv::Point(x,y), CV_RGB(0,0,64));

if(area>max)
{
maxPt = cv::Point(x,y);
max = area;
}
}
}
}
floodFill(outerBox, maxPt, CV_RGB(255,255,255));

特别有问题的代码行是 floodFill(outerBox, maxPt, CV_RGB(255,255,255));

谁能告诉我如何修改我的代码以填充其余的卡片边缘?根据图像的不同,突出显示的边缘并不总是一致的,但始终从左侧开始填充至少 1/2 的边缘。

最佳答案

你是发帖人吗? Automatic perspective correction OpenCV你做的一切都很好,但方式很复杂。你的结果应该是 enter image description here .看到不同?不是直线而是模糊。我猜你只是没有正确显示你的输出。顺便说一句,您忘记提及输入图像的链接并显示如何在代码中显示结果。

查看算法的中间输出非常有益。您只需一行代码即可完成此操作,例如:

imshow("blur", bw);

也不要用像 CV_RGB(0,0,64) 这样的颜色值来填充单 channel 灰度图像。在循环中动态执行此操作可能会导致意外结果。

关于c++ - OpenCV 洪水填充卡边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22524547/

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