Hough变换

本文详细介绍了Hough变换的基本原理及其在图像处理中的应用,用于识别和检测图像中的直线。通过Canny算法提取边缘后,使用概率Hough变换和标准Hough变换找到直线,并在图像上绘制。代码示例展示了如何在Python中使用OpenCV库实现这一过程。
摘要由CSDN通过智能技术生成

Hough变换

1. 简单介绍

Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。

2.Hough变换思想

在原始图像坐标系下的一个点对应了参数坐标系中的一条直线,同样参数坐标系的一条直线对应了原始坐标系下的一个点,然后,原始坐标系下呈现直线的所有点,它们的斜率和截距是相同的,所以它们在参数坐标系下对应于同一个点。这样在将原始坐标系下的各个点投影到参数坐标系下之后,看参数坐标系下有没有聚集点,这样的聚集点就对应了原始坐标系下的直线。

3.代码实现

import cv2
import numpy as np
#hough变换的程序实现

img = cv2.imread("D:\jupyter\img/building.jpg")#读取图片
img2 = img.copy()
gray =cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将图片转换为灰度图
edges = cv2.Canny(gray,50,150,apertureSize = 3)#canny算法提取轮廓

#基于概率的hough变换......................................................
lines_Probabilitys = cv2.HoughLinesP(edges,1,np.pi/180,30,minLineLength=60,maxLineGap=10)#概率hough变换
lines_Probability = lines_Probabilitys[:,0,:]#提取为二维
for x1,y1,x2,y2 in lines_Probability[:]:
    cv2.line(img,(x1,y1),(x2,y2),(255,0,0),1)

cv2.namedWindow("HoughLines_Probabilitys", 2)   #创建一个窗口
cv2.imshow('HoughLines_Probabilitys', img)    #显示原始图片

#标准的hough变换......................................................
lines_standards = cv2.HoughLines(edges,1,np.pi/180,200) #标准hough变换查找直线

#绘制hough变换后找到的所有直线,返回数据是一个二位数组
for lines_standard in lines_standards:
    for rho,theta in lines_standard:
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a*rho
        y0 = b*rho
        x1 = int(x0 + 1000*(-b))
        y1 = int(y0 + 1000*(a))
        x2 = int(x0 - 1000*(-b))
        y2 = int(y0 - 1000*(a))
        cv2.line(img2,(x1,y1),(x2,y2),(0,0,255),2)

print(lines_standards)#打印出找到的直线的极坐标系坐标、

cv2.namedWindow("HoughLines_standards", 2)   #创建一个窗口
cv2.imshow('HoughLines_standards', img2)    #显示原始图片

cv2.waitKey()

4.运行结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值