OpenCV实现直线检测
作者:Robin?Long?2018 时间:2023-08-14 01:37:35
本文实例为大家分享了OpenCV实现直线检测的具体代码,供大家参考,具体内容如下
1 介绍
本文主要介绍OpenCV自带的直线检测函数HoughLines()的用法,这个函数的第一个参数是一个二值化图像,所以在进行霍夫变换之前要首先进行二值化,或者进行Canny 边缘检测。第二和第三个值分别代表β 和 θ 的精确度。第四个参数是阈值,只有累加其中的值高于阈值时才被认为是一条直线,也可以把它看成能检测到的直线的最短长度(以像素点为单位)。返回值就是(β; θ)。β 的单位是像素,θ的单位是弧度。
2 代码
#直线检测
#使用霍夫直线变换做直线检测,前提条件:边缘检测已经完成
import cv2 as cv
import numpy as np
import matplotlib.pylab as plt
#标准霍夫线变换
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)
lines = cv.HoughLines(edges, 1, np.pi/180, 80)
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)
#统计概率霍夫线变换
def line_detect_possible_demo(image):
gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY)
edges = cv.Canny(gray, 50, 150, apertureSize=3) # apertureSize参数默认其实就是3
lines = cv.HoughLinesP(edges, 1, np.pi / 180, 60, minLineLength=60, maxLineGap=5)
for line in lines:
x1, y1, x2, y2 = line[0]
cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
cv.imshow("line_detect_possible_demo",image)
src = cv.imread(r'..\edge.jpg')
print(src.shape)
cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE)
cv.imshow('input_image', src)
line_detection(src)
src = cv.imread(r'..\edge.jpg') #调用上一个函数后,会把传入的src数组改变,所以调用下一个函数时,要重新读取图片
line_detect_possible_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
3 效果
来源:https://blog.csdn.net/u013419318/article/details/102565086
标签:OpenCV,直线检测
0
投稿
猜你喜欢
Python3中安装后SSL问题及解决
2022-07-04 14:41:16
99%的程序员都会收藏的书单 你读过几本?
2022-10-01 19:45:59
FCKeditor的几点修改小结
2023-05-15 22:13:09
详解Mysql主从同步配置实战
2024-01-14 16:36:13
基于hashlib模块--加密(详解)
2023-10-08 15:46:29
python使用cartopy库绘制台风路径代码
2023-08-22 15:50:18
ASP连接SQL2005数据库连接代码
2011-03-25 10:44:00
python游戏库pygame经典教程(推荐!)
2022-10-02 06:26:11
Python Pyperclip模块安装和使用详解
2023-06-25 13:52:11
Python将list元素转存为CSV文件的实现
2022-03-14 20:15:00
解剖JavaScript中的null和undefined
2009-03-01 12:49:00
Python实现发送QQ邮件的封装
2022-10-08 21:19:56
vue+AI智能机器人回复功能实现
2024-04-27 15:49:14
python selenium自动上传有赞单号的操作方法
2023-05-21 13:24:43
MYSQL ERROR 1045 (28000): Access denied for user (using password: YES)问题的解决
2024-01-26 23:19:50
JavaScript中使用Async实现异步控制
2023-08-23 00:55:54
网站的视觉设计
2008-08-15 12:58:00
解决mysql输入密码闪退的问题
2024-01-21 02:29:14
vue3 reactive函数用法实战教程
2023-07-02 16:37:36
大数据量时提高分页的效率
2024-01-25 09:07:37