【发布时间】:2014-03-20 05:54:57
【问题描述】:
我正在使用此代码尝试在图像中查找卡片的边缘。当我运行它时,它只勾勒出卡片边缘的一半。
这是我返回的图像示例。
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 的边缘总是从左侧开始填充。
【问题讨论】: