以下代码试图识别平面图图像中的门形状 它可以检测某些形状,但不能检测所有形状。 在其他带有门形状的图像中,单线容易被检测到,但带有双线形状的图像无法识别。 谁能帮我
import cv2
img = cv2.imread('1.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# convert to binary image
thresh=cv2.threshold(gray, 190, 255, cv2.THRESH_BINARY )[1]
# Morphological reconstruction (delete labels)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (8,8))
kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
marker = cv2.dilate(thresh,kernel,iterations = 1)
while True:
tmp=marker.copy()
marker=cv2.erode(marker, kernel2)
marker=cv2.max(thresh, marker)
difference = cv2.subtract(tmp, marker)
if cv2.countNonZero(difference) == 0:
break
marker = cv2.erode(marker,kernel2,iterations = 1)
cv2.imwrite('marker.png', marker)
# only walls
grad_x = cv2.Sobel(marker, cv2.CV_8U, 1, 0, ksize=3, scale=1, delta=0, borderType=cv2.BORDER_DEFAULT)
grad_x = cv2.dilate(grad_x,kernel2,iterations = 1)
grad_y = cv2.Sobel(marker, cv2.CV_8U, 0, 1, ksize=3, scale=1, delta=0, borderType=cv2.BORDER_DEFAULT)
grad_y = cv2.dilate(grad_y,kernel2,iterations = 1)
grad=cv2.bitwise_and(grad_x, grad_y)
output = cv2.connectedComponentsWithStats(grad, 4, cv2.CV_32S)
num_labels = output[0]
labels = output[1]
stats=output[2]
centroids = output[3]
for i in range(num_labels):
left,top,width,height,area=stats[i]
if width>30 or height>30:
cv2.rectangle(img,(left, top), (left+width, top+height), (0,0,255))
print(stats[i])
cv2.imwrite('out.png', img)