首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV Python:仅在ROI中检测行

OpenCV Python:仅在ROI中检测行
EN

Stack Overflow用户
提问于 2018-11-07 13:11:06
回答 1查看 2.5K关注 0票数 0

我想在感兴趣的区域内探测到线。我的输出图像应该在选定的ROI中显示原始图像和检测到的行。到目前为止,在原始图像中查找线条或选择ROI并不是一个问题,但仅在ROI中查找线条不起作用。我的MWE读取图像,将其转换为灰度,并允许我选择ROI,但当HoughLinesP想读取roi时会出现错误。

代码语言:javascript
复制
import cv2
import numpy as np

img = cv2.imread('example.jpg',1)
gray = cv2.cvtColor(img ,cv2.COLOR_BGR2GRAY)

# Select ROI
fromCenter = False
roi = cv2.selectROI(gray, fromCenter)

# Crop ROI
roi = img[int(roi[1]):int(roi[1]+roi[3]), int(roi[0]):int(roi[0]+roi[2])]

# Find lines
minLineLength = 100
maxLineGap = 30
lines = cv2.HoughLinesP(roi,1,np.pi/180,100,minLineLength,maxLineGap)
for x in range(0, len(lines)):
    for x1,y1,x2,y2 in lines[x]:
        cv2.line(img,(x1,y1),(x2,y2),(237,149,100),2)

cv2.imshow('Image',img)
cv2.waitKey(0) & 0xFF

cv2.destroyAllWindows()

控制台显示:

lines = cv2.HoughLinesP(roi,1,np.pi/180,100,minLineLength,maxLineGap) C:\Miniconda3\conda-bld\opencv-suite_1533128839831\work\modules\imgproc\src\hough.cpp:441:错误:(-215) image.type() == (0)和(1 << 3) - 1)) +(1)-1) << 3)

我的假设是roi没有正确的格式。我使用Python3.6和Spyder3.2.8。谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-08 01:42:47

函数cv2.HoughLinesP需要一个单通道图像,因此可以从灰度图像中提取裁剪区域,这将消除错误:

代码语言:javascript
复制
# Crop the image
roi = list(map(int, roi)) # Convert to int for simplicity
cropped = gray[roi[1]:roi[1]+roi[3], roi[0]:roi[0]+roi[2]]

请注意,我将输出名从roi更改为cropped,这是因为您仍然需要roi框。点x1x2y1y2是裁剪图像中的像素位置,而不是完整图像。要正确绘制图像,只需从roi添加左上角像素位置即可。下面是具有相关编辑的for循环:

代码语言:javascript
复制
# Find lines
minLineLength = 100
maxLineGap = 30
lines = cv2.HoughLinesP(cropped,1,np.pi/180,100,minLineLength,maxLineGap)
for x in range(0, len(lines)):
    for x1,y1,x2,y2 in lines[x]:
        cv2.line(img,(x1+roi[0],y1+roi[1]),(x2+roi[0],y2+roi[1]),(237,149,100),2)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53190155

复制
相关文章

相似问题

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