这是关于方形检测的跟进,涉及类似 问题,其中karlphillip、mevatron和abid-rahman-k提出了一些很酷的方法。
我正在尝试设计一个强大的方形检测算法,以帮助从图像的其余部分中隔离出收据图片。我的代码基于先前问题中的凸包方法,但在一张图片上卡住了,因为其中一个点不在图像中,并且由于左侧的笔筒,收据的边缘有异常。
如何检测这张收据的角落?
以下是该图片:
我正在尝试设计一个强大的方形检测算法,以帮助从图像的其余部分中隔离出收据图片。我的代码基于先前问题中的凸包方法,但在一张图片上卡住了,因为其中一个点不在图像中,并且由于左侧的笔筒,收据的边缘有异常。
如何检测这张收据的角落?
以下是该图片:
这是我的代码:
import cv2
import numpy as np
img = cv2.imread('taco.jpg')
img = cv2.resize(img,(1944,2592))
img = cv2.medianBlur(img,31)
img = cv2.GaussianBlur(img,(0,0),3)
grayscale = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
thresh = cv2.Canny(grayscale, 10, 20)
thresh = cv2.dilate(thresh,None)
contours,hier = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
if cv2.contourArea(cnt)>250: # remove small areas like noise etc
hull = cv2.convexHull(cnt) # find the convex hull of contour
hull = cv2.approxPolyDP(hull,0.1*cv2.arcLength(hull,True),True)
if len(hull)==4:
cv2.drawContours(img,[hull],0,(0,255,0),2)
cv2.namedWindow('output',cv2.cv.CV_WINDOW_NORMAL)
cv2.imshow('output',img)
cv2.cv.ResizeWindow('output',960,640)
cv2.waitKey()
cv2.destroyAllWindows()
有什么想法吗?