OpenCV实现直线检测

 更新时间:2022年08月01日 11:47:07   作者:Robin Long 2018  
这篇文章主要为大家详细介绍了OpenCV实现直线检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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 效果 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python连接es之es更新操作示例详解

    Python连接es之es更新操作示例详解

    这篇文章主要为大家介绍了Python连接es之es更新操作示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现

    OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现

    这篇文章主要介绍了OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Python的Tqdm模块实现进度条配置

    Python的Tqdm模块实现进度条配置

    这篇文章主要介绍了Python的Tqdm模块实现进度条配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • wxPython窗体拆分布局基础组件

    wxPython窗体拆分布局基础组件

    这篇文章主要为大家详细介绍了wxPython窗体拆分布局基础组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • 解决Jupyter NoteBook输出的图表太小看不清问题

    解决Jupyter NoteBook输出的图表太小看不清问题

    这篇文章主要介绍了解决Jupyter NoteBook输出的图表太小看不清问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • OpenCV实现从灰度图像切出Mask前景区域

    OpenCV实现从灰度图像切出Mask前景区域

    本文主要介绍了如何利用OpenCV实现从灰度图像,根据阈值,切出多个前景区域,过滤面积太小的图像。文中的示例代码讲解详细,需要的可以参考一下
    2022-06-06
  • 基于python实现检索标记敏感词并输出

    基于python实现检索标记敏感词并输出

    这篇文章主要介绍了基于python实现检索敏感词并输出,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 深入解析Python中BeautifulSoup4的基础知识与实战应用

    深入解析Python中BeautifulSoup4的基础知识与实战应用

    BeautifulSoup4正是一款功能强大的解析器,能够轻松解析HTML和XML文档,本文将介绍BeautifulSoup4的基础知识,并通过实际代码示例进行演示,感兴趣的可以了解下
    2024-02-02
  • Python中isnumeric()方法的使用简介

    Python中isnumeric()方法的使用简介

    这篇文章主要介绍了Python中isnumeric()方法的使用,isnumeric()方法的使用是Python入门中的基础知识,需要的朋友可以参考下
    2015-05-05
  • Anaconda下Python中h5py与netCDF4模块下载与安装的教程详解

    Anaconda下Python中h5py与netCDF4模块下载与安装的教程详解

    这篇文章主要为大家详细介绍了基于Anaconda,下载并安装Python中h5py与netCDF4这两个模块的方法,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01

最新评论