【opencv自学笔记】13:霍夫直线检测

本文记录了使用OpenCV进行图像处理的过程,包括将图像转换为灰度图,执行边缘检测,然后通过霍夫线变换检测图像中的直线。通过对这些步骤的详细解析,揭示了在Python中实现霍夫变换检测直线的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转换灰度图——边缘检测——霍夫线变换

# -*- coding: utf-8 -*-
"""
霍夫直线检测
转换灰度图,边缘检测,霍夫线变换
@author: LNP
"""
import cv2 as cv
import numpy as np


#标准霍夫线变换  贯穿非直线
def line_detect_demo(image):
    copying=image.copy()
    gray=cv.cvtColor(copying,cv.COLOR_BGR2GRAY)
    edge=cv.Canny(gray,50,150)
    lines=cv.HoughLines(edge,1,np.pi/180,200)#1:像素半径 np.pi/180:角度分辨率 200:阈值 
    for line in lines:
        rho,theta=line[0]
        a=np.cos(theta)
        b=np.sin(theta)
        x0=a*rho
        y0=b*rho
        #opencv 源代码要求这样计算
        x1=int(x0+1000*(-b))
        y1=int(y0+1000*(a))
        x2=int(x0-1000*(-b))
        y2=int(y0-1000*(a))
        cv.line(copying, (x1,y1),(x2,y2),(0,0,255),2)
    cv.imshow('line_detect',copying)

#统计霍夫变换   分段的直线
def linep_detect_demo(image):
    copying=image.copy()
    gray=cv.cvtColor(copying,cv.COLOR_BGR2GRAY)
    edge=cv.Canny(gray,50,150)
    lines=cv.HoughLinesP(edge,1,np.pi/180,100,minLineLength=50,maxLineGap=10) 
    for line in lines:
        x1,y1,x2,y2=line[0]
        cv.line(copying, (x1,y1),(x2,y2),(0,0,255),2)
    cv.imshow('line_detect_demo',copying)
    
src=cv.imread("D:/Study/opencv/code/line.jpg")
cv.imshow('src',src)
linep_detect_demo(src)
line_detect_demo(src)

cv.waitKey(0)
cv.destroyAllWindows()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值