我遵循了不同的教程来识别OpenCV中的形状,但是其中大多数教程只是识别一张纸上的形状。我想将其带入“下一个”层次并识别真实图像中的形状。我认为下一步很简单,就是拍摄砖墙的图像并识别其中的所有砖块,因为它们应该具有相当简单的形状即可识别。我一直在使用以下图片作为练习:
我的代码如下:
import cv2
import numpy as np
img = cv2.imread("imgs/wall.jpeg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#cv2.imshow('gray', gray)
#cv2.waitKey(0)
edges = cv2.Canny(gray,190,200,apertureSize = 3)
cv2.imshow('edges',edges)
cv2.waitKey(0)
_, contours,h = cv2.findContours(edges, 1,2)
for cnt in contours:
approx = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True)
if len(approx)==4:
cv2.drawContours(img,[cnt],0,(0,0,255),2)
cv2.imshow("img", img)
cv2.waitKey(0)
所以我想到的第一件事是用精巧的边缘检测仪弄清这堵墙的所有边缘。这给了我以下图像:
在此图像上,我们可以清楚地看到所有矩形,因此我想通过寻找轮廓来查找所有这些矩形将非常容易。但事实并非如此。如果我寻找轮廓,则会得到以下信息:
显然不是我想要的。我也尝试过其他方法,例如斑点检测器或霍夫线,但似乎都没有用。如果有人可以给我一些提示,甚至告诉我应该怎么做,我真的很高兴!预先感谢!