
霍夫变换是一种用于在图像中检测线条的算法。该算法通过在图像中寻找符合特定参数的直线,从而实现对线条的定位。 霍夫变换常用于识别文档中的直线、道路上的铁路等。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
import cv2 as cv
import numpy as np
# 直线检测
# 使用霍夫直线变换进行直线检测,前提条件:边缘检测已经完成
# 标准霍夫线变换
def line_detection(image):
gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY)
edges = cv.Canny(gray, 50, 150) # apertureSize参数默认其实就是3
cv.imshow(edges, edges) # cv.HoughLines参数设置:参数1,灰度图像;参数二,以像素为单位的距离精度(一般都是1,进度高,但是速度会慢一点)
# 参数三,以弧度为单位的角度精度(一般是1rad);参数四,阈值,大于阈值threshold的线段才可以被检测通过并返回到结果中
# 该函数返回值为rho与theta lines = cv.HoughLines(edges, 1, np.pi/180, 200)
lines = cv.HoughLines(edges, 1, np.pi/180, 200)
for line in lines:
rho, theta = line[0] # line[0]存储的是点到直线的极径和极角,其中极角是弧度表示的。
a = np.cos(theta) # theta是弧度
b = np.sin(theta)
x0 = a * rho # 代表x = r * cos(theta)
y0 = b * rho # 代表y = r * sin(theta)
x1 = int(x0 + 1000 * (-b)) # 计算直线起点横坐标
y1 = int(y0 + 1000 * a) # 计算起始起点纵坐标
x2 = int(x0 - 1000 * (-b)) # 计算直线终点横坐标
y2 = int(y0 - 1000 * a) # 计算直线终点纵坐标
# 注:这里的数值1000给出了画出的线段长度范围大小,数值越小,画出的线段越短,数值越大,画出的线段越长
cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2) # 点的坐标必须是元组,不能是列表。
cv.imshow(image-lines, image) #点的坐标必须是元组,不能是列表。
return image
def line_detect_possible_demo(image): #统计概率霍夫线变换 #使用霍夫直线变换做直线检测,前提条件:边缘检测已经完成 #标准霍夫线变换 def line_detection(image): gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY) edges = cv.Canny(gray, 50, 150, apertureSize=3) #apertureSize参数默认其实就是3 cv.imshow(edges, edges) #cv.HoughLines参数设置:参数1,灰度图像;参数二,以像素为单位的距离精度(一般都是1,进度高,但是速度会慢一点) #参数三,以弧度为单位的角度精度(一般是1rad);参数四,阈值,大于阈值threshold的线段才可以被检测通过并返回到结果中 #该函数返回值为rho与theta lines = cv.HoughLines(edges, 1, np.pi/180, 200) for line in lines: rho, theta = line[i] #line[i]存储的是点到直线的极径和极角 ,其中极角是弧度表示的。 a=np.... x.... y.... x... y... x... y.... return image def line_detect_possible_demo(): gray=cv.... edges=cv.... lines=cv.... for i in range..... return image src=cv......print......line_detection......line_detect_possible_demo......cv........
全部评论 (0)


