简介:

1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。最基本的霍夫变换是从黑白图像中检测直线(线段)。

2.Hough变换的原理是将特定图形上的点变换到一组参数空间上,根据参数空间点的累计结果找到一个极大值对应的解,那么这个解就对应着要寻找的几何形状的参数(比如说直线,那么就会得到直线的斜率k与常熟b,圆就会得到圆心与半径等等)

3.霍夫线变换是一种用来寻找直线的方法。用霍夫线变换之前, 首先需要对图像进行边缘检测的处理,也即霍夫线变换的直接输入只能是边缘二值图像。

4.霍夫直线检测的具体原理参见:

代码如下:

#直线检测

#使用霍夫直线变换做直线检测,前提条件:边缘检测已经完成

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) #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('E:/imageload/louti.jpg')

print(src.shape)

cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE)

cv.imshow('input_image', src)

line_detection(src)

src = cv.imread('E:/imageload/louti.jpg') #调用上一个函数后,会把传入的src数组改变,所以调用下一个函数时,要重新读取图片

line_detect_possible_demo(src)

cv.waitKey(0)

cv.destroyAllWindows()

运行结果:

注意:

1.opencv的HoughLines函数是标准霍夫线变换函数,该函数的功能是通过一组参数对

的集合来表示检测到的直线,其函数原型为:HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]]) -> lines

image参数表示边缘检测的输出图像,该图像为单通道8位二进制图像。

rho参数表示参数极径

以像素值为单位的分辨率,这里一般使用1像素。

theta参数表示参数极角

以弧度为单位的分辨率,这里使用1度。

threshold参数表示检测一条直线所需最少的曲线交点。

lines参数表示储存着检测到的直线的参数对

的容器 。

srn参数、stn参数默认都为0。如果srn = 0且stn = 0,则使用经典的Hough变换。

min_theta参数表示对于标准和多尺度Hough变换,检查线条的最小角度。

max_theta参数表示对于标准和多尺度Hough变换,检查线条的最大角度。

2.opencv的HoughLinesP函数是统计概率霍夫线变换函数,该函数能输出检测到的直线的端点

,其函数原型为:HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]]) -> lines

image参数表示边缘检测的输出图像,该图像为单通道8位二进制图像。

rho参数表示参数极径

以像素值为单位的分辨率,这里一般使用 1 像素。

theta参数表示参数极角

以弧度为单位的分辨率,这里使用 1度。

threshold参数表示检测一条直线所需最少的曲线交点。

lines参数表示储存着检测到的直线的参数对

的容器,也就是线段两个端点的坐标。

minLineLength参数表示能组成一条直线的最少点的数量,点数量不足的直线将被抛弃。

maxLineGap参数表示能被认为在一条直线上的亮点的最大距离。

以上就是Python+OpenCV图像处理——实现直线检测的详细内容,更多关于python 直线检测的资料请关注脚本之家其它相关文章!

python 检测直线 交点_Python+OpenCV图像处理——实现直线检测相关推荐

  1. 如何用python绘制灰度直方图_Python Opencv任意形状目标检测并绘制框图实例

    Python Opencv检测并绘制框图 opencv 进行任意形状目标识别,供大家参考,具体内容如下 工作中有一次需要在简单的图上进行目标识别,目标的形状不固定,并且存在一定程度上的噪声影响,但是噪 ...

  2. python怎么打印图片_Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头...

    一. 打印图片属性.设置图片存储路径 代码如下: #打印图片的属性.保存图片位置 import cv2 as cv import numpy as np #numpy是一个开源的python科学计算库 ...

  3. python图像轮廓识别_Python+OpenCV图像处理(十六)—— 轮廓发现

    简介:轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现结果. 代码如下: importcv2 as cvimportnumpy as npdefcontou ...

  4. python ocr 识别车牌_python+opencv+TESSERT-OCR实现车牌的检测与识别

    python+opencv+TESSERT-OCR实现车牌的检测与识别 开学花了十天时间0基础搞出来的,分享给大家,如果有什么错误希望大家给我指正.python师从小甲鱼,opencv师从贾志刚,B站 ...

  5. python数字图像处理、色彩空间类型转换_Python+OpenCV图像处理—— 色彩空间转换...

    一.色彩空间的转换 代码如下: #色彩空间转换 import cv2 as cv def color_space_demo(img): gray = cv.cvtColor(img, cv.COLOR ...

  6. python简单目标检测代码_Python Opencv实现单目标检测的示例代码

    一 简介 目标检测即为在图像中找到自己感兴趣的部分,将其分割出来进行下一步操作,可避免背景的干扰.以下介绍几种基于opencv的单目标检测算法,算法总体思想先尽量将目标区域的像素值全置为1,背景区域全 ...

  7. python人脸照片分类_Python OpenCV 人脸识别(一)

    前面介绍了Numpy模块,下面再介绍一个OpenCV模块,就基于这两个库看一下当下很火的人工智能是如何实现的,我们介绍几个:人脸识别(当下非常火的).音视频操作等等.今天先介绍一下静态图片的人脸识别, ...

  8. python人脸识别截图_Python OpenCV调用摄像头检测人脸并截图

    本文实例为大家分享了Python OpenCV调用摄像头检测人脸并截图的具体代码,供大家参考,具体内容如下 注意:需要在python中安装OpenCV库,同时需要下载OpenCV人脸识别模型haarc ...

  9. python颜色识别原理_python+opencv实现颜色检测、轮廓检测、颜色追踪

    准备工作 python配置numpy和openCv库 读取图像和视频图像cv2.imread(路径) cv2.imshow(窗口名称,输出对象) cv2.waitkey(等待时间)import cv2 ...

最新文章

  1. 自欺or欺人? 智能家居行业的“怪现象”
  2. 东华大学计算机学院推免名单,东华大学2020年推免流程及各学院录取情况的说明(持续更新)...
  3. 四则运算2.0版程序
  4. linux环境切换python3版本
  5. LeetCode 431. 将 N 叉树编码为二叉树(递归/层序)
  6. 中学计算机教育特点,中学信息技术考点:信息的概念和基本特征
  7. for in range语句_Python 之旅5——for循环
  8. UE3 性能调试:动态光照环境
  9. Visual Studio中C++工程的环境配置方法
  10. ip_conntrack: falling back to vmalloc解决办法
  11. 全网最全诊断梳理《UDS/OBD诊断诊断描述文件CDD》总目录
  12. 荣誉背后的故事:达内到底有多强?
  13. python database is locked_解决SQLite database is locked
  14. JavaScript 透明背景色
  15. 知道创宇云防御平台通过2021上半年可信云安全运营中心能力评估
  16. EasyCVR使用大华SDK接入时录像显示失败是什么原因?该如何解决?
  17. 通过singlefile把网页保存到本地
  18. jq基础文档手册3.0
  19. 计算机动画制作有什么软件,电脑绘画和动画制作,要用什么软件?
  20. 【转】微信小游戏开发总结

热门文章

  1. 1. InteliJ IDEA 下 的SpringBoot
  2. SURF特征提取分析(一)
  3. mysql逻辑读高影响_运维日记| MySQL/Oracle深度解析之一:逻辑读
  4. 华住数据库_华住内控人系列故事(四)技术领先篇——搭建大数据风险数据仓,实现自助取数...
  5. tensorflow保存内容到相对文件路径下_如何添加自定义文件系统插件
  6. 显示器接口_显示器带全能Type-C接口用起来有多爽?
  7. 网关策略跟计算机名有关系吗,交换机网关与与之相连的计算机的网关有没有必然关系...
  8. 计算机中文件访问时间是什么情况,【反计算机取证必看】Windows系统中文件时间属性的变化及影响因素.pdf...
  9. vim 全局替换_高效操作:vim 快速删除空行和注释
  10. 山东大学计算机学院交叉,Xueying Qin