【发布时间】:2014-04-24 19:29:44
【问题描述】:
我正在上高中,我正在做一个项目来构建一个 iOS 应用程序,让用户扫描名片,目前我正在研究名片上的边缘检测。我相信我的工作正常,它正在绘制卡片的轮廓和其他一些阴影等。
这是我在扫描时返回的示例图像,我可能应该转换为灰度,我也会这样做。
如何找到最大的四边形并将图像裁剪为仅包含卡片?我所有的轮廓都存储在vector<vector<cv::Point> > 中,绿线似乎是我感兴趣的。
【问题讨论】:
我正在上高中,我正在做一个项目来构建一个 iOS 应用程序,让用户扫描名片,目前我正在研究名片上的边缘检测。我相信我的工作正常,它正在绘制卡片的轮廓和其他一些阴影等。
这是我在扫描时返回的示例图像,我可能应该转换为灰度,我也会这样做。
如何找到最大的四边形并将图像裁剪为仅包含卡片?我所有的轮廓都存储在vector<vector<cv::Point> > 中,绿线似乎是我感兴趣的。
【问题讨论】:
要找到最大的四边形,您可以遍历所有四边形并检查它们的尺寸/面积。
可以使用 find findHomography 和 warpPerspective 完成投影。您将需要四边形的四个角点和重投影中的四个对应点(即图像的角点)。
【讨论】:
这并不能直接回答这个问题,但在 python 中,要找到最大的轮廓,你会这样做:
contours, hierarchy = cv2.findContours(image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours.sort(key=cv2.contourArea, reverse=True)
cv2.contourArea 是一个计算轮廓面积的 lambda reverse=True:降序(最大在前)
那么contours的第0个元素就是最大的contours。绘制:
cv2.drawContours(image, contours, 0, (255, 0, 0), 2)
【讨论】: