如何解决关于使用OpenCV进行线路检测
我尝试在下图中标记道路,即黄色的中间线和白色的边缘线。
我使用Hough Transfrom的标准代码。我的代码如下:
import cv2
import numpy as np
img = cv2.imread('Road3.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
low_yellow=np.array([18,94,140])
up_yellow=np.array([48,255,255])
mask=cv2.inRange(hsv,low_yellow,up_yellow)
edges = cv2.Canny(mask,75,150)
lines = cv2.HoughLinesP(edges,1,np.pi/180,50,maxLineGap=250)
for line in lines:
x1,y1,x2,y2 = line[0]
cv2.line(img,(x1,y1),(x2,y2),(0,0),5)
cv2.imshow('image',img)
cv2.imshow("edges",edges)
k = cv2.waitKey(0)
cv2.destroyAllWindows()
但是有错误反馈:
用更改行后
hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
这似乎只是图片的一部分,但我不知道问题出在哪里。
根据艾哈迈德(Ahmet)的回答,我可以按如下方式获得一张黑色的图片,而彩色一张是整个图片的一部分。
解决方法
我猜问题出在这一行:
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
此处的变量名称为hsv
,但cv2.COLOR_BGR2GRAY
不会为您生成hsv映像。相反,它将为您提供单通道Graysclae图像。对于HSV,您需要使用cv2.COLOR_BGR2HSV
。
如here所述,将RGB转换为HSV的正确方法是使用cv2.COLOR_BGR2HSV
标志:
# Convert BGR to HSV
mask = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
更改行时,输出:
- 我如何获得结果?
我使用了imwrite
并将图像保存到本地计算机中。
cv2.imwrite("out.png",edges)
但是,如果要显示,首先需要调整大小以查看整个图像。
cv2.imshow("edges",cv2.resize(edges,(640,480)))
cv2.waitKey(0)
cv2.destroyAllWindows()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。