我按照不同的教程来识别 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)
所以我想到的第一件事就是用精巧的边缘检测器获取这堵墙的所有边缘。这给了我以下图像:
在这张图片上,我们可以清楚地看到所有的矩形,所以我的想法是通过寻找轮廓很容易找到所有这些矩形。但事实证明并非如此。如果我寻找轮廓,我会得到以下信息:
这显然不是我想要的。我也一直在尝试不同的东西,比如斑点检测器或霍夫线,但似乎都没有奏效。如果有人能给我一些建议,甚至告诉我应该怎么做,我真的会很高兴!提前致谢!