#引入opencv模块
import cv2 as cv
#引入numpy模块
import numpy as np
#引入sys模块
import sys
#line
def line_detection(img):
blurred = cv.GaussianBlur(img,(5,5),0)
gray = cv.cvtColor(blurred,cv.COLOR_BGR2GRAY)
edge_output = cv.Canny(gray,50,150,apertureSize=3)
cv.namedWindow("canny_direct_edge",cv.WINDOW_NORMAL)
cv.imshow("canny_direct_edge",edge_output)
lines = cv.HoughLines(edge_output,1,np.pi/180,200)
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))
cv.line(img,(x1,y1),(x2,y2),(0,255,255),2)
cv.namedWindow("lines_img",cv.WINDOW_NORMAL)
cv.imshow("lines_img",img)
#line
def line_detection_possible(img):
blurred = cv.GaussianBlur(img,(5,5),0)
gray = cv.cvtColor(blurred,cv.COLOR_BGR2GRAY)
edge_output = cv.Canny(gray,50,150,apertureSize=3)
cv.namedWindow("canny_direct_edge_P",cv.WINDOW_NORMAL)
cv.imshow("canny_direct_edge_P",edge_output)
lines = cv.HoughLinesP(edge_output,1,np.pi/180,100,minLineLength=50,maxLineGap=10)
for line in lines:
x1,y1,x2,y2 = line[0]
cv.line(img,(x1,y1),(x2,y2),(0,255,255),2)
cv.namedWindow("lines_img_P",cv.WINDOW_NORMAL)
cv.imshow("lines_img_P",img)
def img_test():
img = cv.imread('E:/chenopencvblogimg/road2.jpg')
#判断是否读取成功
if img is None:
print("Could not read the image,may be path error")
return
cv.namedWindow("origin Pic",cv.WINDOW_NORMAL)
cv.imshow("origin Pic",img)
line_detection(img)
line_detection_possible(img)
#让显示等待键盘输入维持在那里,否则程序跑完就闪退啦!
cv.waitKey(0)
#销毁窗口
cv.destroyAllWindows()
if __name__ == '__main__':
sys.exit(img_test() or 0)
OpenCV__Python 直线检测Hough_教程21
最新推荐文章于 2022-08-27 16:40:24 发布