我正在使用HoughLinesP opencv函数进行边缘检测。我想用trackbars来估计这个函数参数的好值。我有以下代码:
def compute_edgelets(image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
global edges
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
init_thresh = 50
max_thresh = 1000
init_min_line = 10
max_min_line = 1000
init_max_line = 1
max_max_line = 100
cv2.namedWindow("Result")
cv2.createTrackbar("threshold", "Result", init_thresh, max_thresh, on_change)
cv2.createTrackbar("min", "Result", init_min_line, max_min_line, on_change)
cv2.createTrackbar("max", "Result", init_max_line, max_max_line, on_change)
while True:
cv2.imshow("Result", image)
key = cv2.waitKey(1)
if key == ord('q'):
break
cv2.destroyAllWindows()on_change函数:
def on_change(x):
threshold = cv2.getTrackbarPos("threshold", "Result")
min_line_length = cv2.getTrackbarPos("min", "Result")
max_line_gap = cv2.getTrackbarPos("max", "Result")
lines = cv2.HoughLinesP(edges, 1, np.pi / 180, threshold, min_line_length, max_line_gap)
for x in range(0, len(lines)):
for x1, y1, x2, y2 in lines[x]:
cv2.line(image, (x1, y1), (x2, y2), (0, 255, 0), 2)但是,这段代码并不像预期的那样工作--参数似乎不能正常工作,在稍微更改trackbar上的值之后,我得到了以下TypeError:
TypeError:类型为'NoneType‘的对象没有len()
我的铁轨有什么问题吗?
发布于 2020-02-02 00:55:12
不可能告诉您发生这种情况的确切原因(因为您没有提供所有相关数据来重现这个确切的问题),但幸运的是,根本问题很容易找到。
错误指的是对len的调用,在示例代码中使用的惟一位置是获取cv2.HoughLinesP结果的长度。问题是,您正在尝试获取一个长度的None,这是没有意义的。
在Python中,当使用一组禁止查找任何行的参数调用cv2.HoughLinesP时,它将返回None,而不是可以迭代的一系列行参数。我们可以很容易地演示其中几种情况:
将numpy作为np导入cv2打印cv2.HoughLinesP(无,1,np.pi/180,50,10,1)
输出None
进口numpy为np进口cv2打印cv2.HoughLinesP(np.zeros(100,100,1),np.uint8),1,np.pi/180,50,10,1)
输出None
在示例代码中,您不处理这样的场景,而是直接尝试获取结果的长度。由于不能将len应用于None,因此会出现错误。因此,您需要对代码做一些调整..。至少有点像
if lines is None:
returnhttps://stackoverflow.com/questions/60007804
复制相似问题