从包中检查示例后,这是您应该使用它来在Opencv 3.0.0 +中正确使用它
import cv2 import numpy as np import math image1 = cv2.imread('img.png') gray=cv2.cvtColor(image1,cv2.COLOR_BGR2GRAY) dst = cv2.Canny(gray, 50, 200) lines= cv2.HoughLines(dst, 1, math.pi/180.0, 100, np.array([]), 0, 0) #lines1 = cv2.HoughLines(image1,1,math.pi/180.0,5) #lines2 = cv2.HoughLines(image2,1,math.pi/180.0,5) #lines1 = lines1[0] #lines2 = lines2[0] a,b,c = lines.shape for i in range(a): rho = lines[i][0][0] theta = lines[i][0][1] a = math.cos(theta) b = math.sin(theta) x0, y0 = a*rho, b*rho pt1 = ( int(x0+1000*(-b)), int(y0+1000*(a)) ) pt2 = ( int(x0-1000*(-b)), int(y0-1000*(a)) ) cv2.line(image1, pt1, pt2, (0, 0, 255), 2, cv2.LINE_AA) cv2.imshow('image1',image1) cv2.waitKey(0) cv2.destoryAllWindows(0)
我对OpenCV 3.4也有同样的问题。罪魁祸首是numpy数组 lines :
lines
[[[ 7.99000000e+02 1.57079637e+00]] [[ 9.39000000e+02 1.57079637e+00]] [[ 1.57100000e+03 1.57079637e+00]] [[ 6.68000000e+02 1.57079637e+00]] [[ 5.46000000e+02 1.57079637e+00]] [[ 1.42700000e+03 1.57079637e+00]] ... [[ 1.49100000e+03 1.57079637e+00]]]
请注意,这是一个3D数组,而示例代码将其视为2D数组。修复只是从3D数组中提取rho和theta(只改变了前两行):
for line in lines: rho, theta = line[0] a = np.cos(theta) b = np.sin(theta) x0 = a*rho y0 = b*rho x1 = int(x0 + 1000*(-b)) y1 = int(y0 + 1000*(a)) x2 = int(x0 - 1000*(-b)) y2 = int(y0 - 1000*(a)) cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2)