擅长:python、mysql、java
<p>好吧,我找到了一些很好的东西,给那些即将来到这一页的人。在</p>
<p>首先,找出所有的轮廓线,然后在一张黑色图片上画出来。(我把它们画得更大,就像OpenCv找到的轮廓之间有空间,你不会感到烦恼)</p>
<pre><code>_, contours, _ = cv2.findContours(edges.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
contours=list(filter(lambda cont: cv2.arcLength(cont, False) > 60, contours))
# show only contours
blank = np.zeros((orig.shape[0],orig.shape[1],3), np.uint8)
cv2.drawContours(blank, contours,-1,(0,255,0),5)
</code></pre>
<p><a href="https://i.stack.imgur.com/6xlVq.png" rel="nofollow noreferrer">contours</a></p>
^{pr2}$
<p>再次应用canny&find contour。这一步其实只是为了能够找到一个真正的轮廓,如果你的图像不完美。在</p>
<pre><code>maxcontour=0
for cnt in contours:
cv2.drawContours(img, cnt, 0, (255, 255, 0), 2)
if cv2.contourArea(cnt)>5000: # 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)
</code></pre>
<p><a href="https://i.stack.imgur.com/jaXKW.png" rel="nofollow noreferrer">final</a></p>