转换灰度图——边缘检测——霍夫线变换
# -*- coding: utf-8 -*-
"""
霍夫直线检测
转换灰度图,边缘检测,霍夫线变换
@author: LNP
"""
import cv2 as cv
import numpy as np
#标准霍夫线变换 贯穿非直线
def line_detect_demo(image):
copying=image.copy()
gray=cv.cvtColor(copying,cv.COLOR_BGR2GRAY)
edge=cv.Canny(gray,50,150)
lines=cv.HoughLines(edge,1,np.pi/180,200)#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
#opencv 源代码要求这样计算
x1=int(x0+1000*(-b))
y1=int(y0+1000*(a))
x2=int(x0-1000*(-b))
y2=int(y0-1000*(a))
cv.line(copying, (x1,y1),(x2,y2),(0,0,255),2)
cv.imshow('line_detect',copying)
#统计霍夫变换 分段的直线
def linep_detect_demo(image):
copying=image.copy()
gray=cv.cvtColor(copying,cv.COLOR_BGR2GRAY)
edge=cv.Canny(gray,50,150)
lines=cv.HoughLinesP(edge,1,np.pi/180,100,minLineLength=50,maxLineGap=10)
for line in lines:
x1,y1,x2,y2=line[0]
cv.line(copying, (x1,y1),(x2,y2),(0,0,255),2)
cv.imshow('line_detect_demo',copying)
src=cv.imread("D:/Study/opencv/code/line.jpg")
cv.imshow('src',src)
linep_detect_demo(src)
line_detect_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()