python hough变换检测直线的实现方法
作者:Jackilina_Stone 时间:2022-06-11 10:08:37
1 原理
2 检测步骤
将参数空间(ρ,θ) 量化成m*n(m为ρ的等份数,n为θ的等份数)个单元,并设置累加器矩阵,初始值为0;
对图像边界上的每一个点(x,y)带入ρ=xcosθ+ysinθ,求得每个θ对应的ρ值,并在ρ和θ所对应的单元,将累加器加1,即:Q(i,j)=Q(i,j)+1;
检验参数空间中每个累加器的值,累加器最大的单元所对应的ρ和θ即为直角坐标系中直线方程的参数。
3 接口
image:二值图像,canny边缘检测输出。这里是result。
rho: 以像素为单位的距离精度,这里为1像素。如果想要检测的线段更多,可以设为0.1。
theta: 以弧度为单位的角度精度,这里为numpy.pi/180。如果想要检测的线段更多,可以设为0.01 * numpy.pi/180。
threshod: 阈值参数,int类型,超过设定阈值才被检测出线段,这里为10。
minLineLength:线段以像素为单位的最小长度。
maxLineGap:同一方向上两条线段判定为一条线段的最大允许间隔。
4 代码及结果
import os
import numpy as np
import cv2
from PIL import Image, ImageEnhance
import math
def img_processing(img):
# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)
# canny边缘检测
edges = cv2.Canny(binary, 50, 150, apertureSize=3)
return edges
def line_detect(img):
img = Image.open(img)
img = ImageEnhance.Contrast(img).enhance(3)
# img.show()
img = np.array(img)
result = img_processing(img)
# 霍夫线检测
lines = cv2.HoughLinesP(result, 1, 1 * np.pi/180, 10, minLineLength=10, maxLineGap=5)
# print(lines)
print("Line Num : ", len(lines))
# 画出检测的线段
for line in lines:
for x1, y1, x2, y2 in line:
cv2.line(img, (x1, y1), (x2, y2), (255, 0, 0), 1)
pass
img = Image.fromarray(img, 'RGB')
img.show()
if __name__ == "__main__":
line_detect("1.jpg")
pass
原图如下:
检测结果:
来源:https://blog.csdn.net/wss794/article/details/93023013
标签:python,hough,检测直线
0
投稿
猜你喜欢
Python多线程原理与用法实例剖析
2023-07-22 13:40:37
MySQL sql_mode的使用详解
2024-01-16 00:13:59
Python pandas库中的isnull()详解
2022-06-06 20:58:01
Python 生成VOC格式的标签实例
2021-09-09 04:39:07
python 保存float类型的小数的位数方法
2021-06-28 05:44:12
sql注入数据库原理详情介绍
2024-01-15 17:05:12
IE9硬件加速性能远超Chrome5.0和Firefox4.0
2010-06-09 11:12:00
innodb_index_stats导入备份数据时报错表主键冲突的解决方法
2024-01-19 19:33:51
Python实现Tab自动补全和历史命令管理的方法
2022-06-16 10:12:46
Python文件操作和数据格式详解(简单简洁)
2022-12-18 21:28:01
python相对企业语言优势在哪
2021-08-27 23:37:21
python生成ppt的方法
2021-11-08 11:50:48
JavaScript EasyPager 分页函数
2024-06-16 21:14:31
Python最基本的数据类型以及对元组的介绍
2022-03-26 07:04:07
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2022-04-27 00:26:39
python中upper是做什么用的
2023-10-30 15:53:29
如何由Sybase向SQL Server移植数据库
2009-01-20 15:56:00
VS 2010 Ultimate架构代码探索
2010-05-02 20:38:00
公共Hooks封装报表导出useExportExcel实现详解
2024-04-28 09:21:36
解析Python中的__getitem__专有方法
2023-10-17 13:40:19