OpenCV - 检测矩形或五边形
Posted
技术标签:
【中文标题】OpenCV - 检测矩形或五边形【英文标题】:OpenCV - Detection of rectangle or pentagon 【发布时间】:2016-06-08 00:23:02 【问题描述】:如何使用 OpenCV 从图像中检测矩形或五边形?我有很多名片的图片,我必须检测它们的侧面。名片实际上是矩形的,但有时名片的角会被裁剪。我尝试过HoughLinesP()
功能,但它只是在寻找线条。
我必须检测图片上方的形状,这意味着无论该形状是矩形还是五边形,我都需要检测名片边缘,并且只需要从图像中裁剪名片对象。
预期结果:
【问题讨论】:
“它只找到线条” 这就是线条的霍夫变换。请展示几张图片和一些代码,见How to Ask 【参考方案1】:您可以按照以下步骤操作:
使用findContours
查找图像中的轮廓。
执行approxPoly
获取图像中所有轮廓的多边形形状。
检查近似轮廓大小(多边形的边数):
如果边数是 4 => 矩形
如果边数是5 =>五边形
代码在 python 中,但应该很容易转换为 C++:
import cv2
gray = cv2.imread('img.png',0)
ret,thresh = cv2.threshold(gray,127,255,1)
contours,h = cv2.findContours(thresh,1,2)
for cnt in contours:
approx = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True)
if len(approx)==5:
print "pentagon"
elif len(approx)==4:
print "rectangle"
【讨论】:
这仅适用于琐碎的图像。但这是一个开始...... ;D 你能发布一个 sn-p 来展示如何做到这一点吗? @Miki,我不知道在您的情况下什么是“微不足道的图像”,如果您有可能不适合他们的图像示例,请编辑您的问题并链接它们。 这不是我的问题;D【参考方案2】:您可以尝试使用MatchShapes函数。
Here is an example.
我还找到了一个教程,实现了类似于@Dr.Haimovitz 建议的方法: 这是here。
【讨论】:
以上是关于OpenCV - 检测矩形或五边形的主要内容,如果未能解决你的问题,请参考以下文章