python hough变换检测直线的实现方法
作者:Jackilina_Stone 发布时间:2022-06-11 10:08:37
标签:python,hough,检测直线
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


猜你喜欢
- 第1关:Scatter:散点图(一)编程要求根据以上介绍,在右侧编辑器补充代码,绘制给定数据的散点图,要求:画布大小初始化为宽 1600 像
- 以下保存成 App.xml , 与asp文件放在相同目录下! 代码如下: <?xml version="1.0"
- 操作系统:Ubuntu 17.04 64位MySQL版本:MySQL 5.7一、查看3306端口是否开放netstat -an|grep 3
- event.keycode值大全 1 keycode 8 = BackSpace BackSpace 2 keycode 9 = Tab T
- 一、MySQL安装MySQL的下载http://dev.mysql.com/downloads/mysql/MySQL版本选择MySQL功能
- MySQL字符集多种多样,下面为列举了其中三种最常见的字符集查看方法,该方法供您参考,希望对学习MySQL数据库能有所启迪。一、查看MySQ
- 早期写的python障碍式期权的定价脚本,供大家参考,具体内容如下#coding:utf-8'''障碍期权q=x/s
- 本文实例为大家分享了小程序实现tab更换页面效果的具体代码,供大家参考,具体内容如下.wxml<scroll-view scroll-
- Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。Django 为这些数据库提
- SQL Server数据库快捷键:书签:清除所有书签。 CTRL-SHIFT-F2书签:插入或删除书签(切换)。 CTRL+F2书签:移动到
- 假设现有一张人员表(表名:Person),若想将姓名、身份证号、住址这三个字段完全相同的记录查找出来,使用1: SELECT p
- 一、原因浅析今天在写一个Python与html5 Websocket 实例,么次终止运行重新运行脚本总是提示地址已经存在并且被使用!查询相关
- 关于这个话题,我也看到网上有其他方法来解决。 不过从性能和代码量上来看,我有更好的办法。 在这里和大家 分享。 原理其实很简单, 知识1、长
- 最近在写测试平台,需要实现一个节点服务器的api,正好在用django,准备使用djangorestframework插件实现。需求实现一个
- 报错现象File "<string>", line 1SyntaxError: unexpected EOF
- CSS是制作网页效果必不可少的东西,字体的颜色定义、表格的样式定义、图片的特效等等都少不了它。但在Dr
- 单例模式单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池、全局缓存、浏览器中的 window 对象等。在 JavaScri
- 输入任意一个大写字母,生成金字塔图形def GoldTa(input): L = [chr(i) for i in range(
- 1.建立Recordset对象 代码如下:Dim objMyRst Set objMyRst=Server.C
- 要在密码两字中间添加空格,发现直接添加 是识别不了的,正确写法为:代码: <el-form-item label=