首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用轨迹栏的HoughLinesP

使用轨迹栏的HoughLinesP
EN

Stack Overflow用户
提问于 2020-01-31 16:31:46
回答 1查看 184关注 0票数 2

我正在使用HoughLinesP opencv函数进行边缘检测。我想用trackbars来估计这个函数参数的好值。我有以下代码:

代码语言:javascript
复制
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函数:

代码语言:javascript
复制
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()

我的铁轨有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

  • Process一个全黑图像:

进口numpy为np进口cv2打印cv2.HoughLinesP(np.zeros(100,100,1),np.uint8),1,np.pi/180,50,10,1)

输出None

在示例代码中,您不处理这样的场景,而是直接尝试获取结果的长度。由于不能将len应用于None,因此会出现错误。因此,您需要对代码做一些调整..。至少有点像

代码语言:javascript
复制
if lines is None:
     return
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60007804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档