霍夫直线检测python_python+opencv实现霍夫变换检测直线

本文实例为大家分享了python+opencv实现霍夫变换检测直线的具体代码,供大家参考,具体内容如下

功能:

创建一个滑动条来控制检测直线的长度阈值,即大于该阈值的检测出来,小于该阈值的忽略

注意:这里用的函数是houghlinesp而不是houghlines,因为houghlinesp直接给出了直线的断点,在画出线段的时候可以偷懒

代码:

# -*- coding: utf-8 -*-

import cv2

#两个回调函数

def houghlinesp(minlinelength):

global minlinelength

minlinelength = minlinelength + 1

print "minlinelength:",minlinelength + 1

tempiamge = scr.copy()

lines = cv2.houghlinesp( edges, 1, cv2.cv.cv_pi/180, minlinelength, 0 )

for x1,y1,x2,y2 in lines[0]:

cv2.line(tempiamge,(x1,y1),(x2,y2),(0,255,0),1)

cv2.imshow(window_name,tempiamge)

#临时变量

minlinelength = 20

#全局变量

minlinelength = 20

max_value = 100

window_name = "houghlines demo"

trackbar_value = "minlinelength"

#读入图片,模式为灰度图,创建窗口

scr = cv2.imread("g:\\homework\\building.bmp")

gray = cv2.cvtcolor(scr,cv2.color_bgr2gray)

img = cv2.gaussianblur(gray,(3,3),0)

edges = cv2.canny(img, 50, 150, aperturesize = 3)

cv2.namedwindow(window_name)

#创建滑动条

cv2.createtrackbar( trackbar_value, window_name, \

minlinelength, max_value, houghlinesp)

#初始化

houghlinesp(20)

if cv2.waitkey(0) == 27:

cv2.destroyallwindows()

调用:

>>> import os

>>> os.chdir("g:\homework")

>>>

>>> import houghlines

minlinelength: 20

minlinelength: 21

minlinelength: 22

minlinelength: 23

minlinelength: 25

minlinelength: 26

minlinelength: 27

minlinelength: 28

效果图:

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
霍夫直线检测(Hough Line Transform)是一种经典的图像处理算法,用于检测图像中的直线。下面是一个使用 Python 实现的简单示例代码,不调用 OpenCV 库: ```python import numpy as np import math def hough_lines(image): # 定义参数 theta_res = 1 # 角度步长 rho_res = 1 # 距离步长 threshold = 50 # 阈值 theta_num = int(180 / theta_res) rows, cols = image.shape # 计算图像的最大距离 max_distance = int(math.sqrt(rows**2 + cols**2)) # 构造累加器矩阵 accumulator = np.zeros((int(max_distance / rho_res), theta_num), dtype=np.uint8) # 遍历图像中所有非零像素点 for r in range(rows): for c in range(cols): if image[r][c] > 0: for t in range(theta_num): theta = t * theta_res * math.pi / 180.0 rho = int((c * math.cos(theta) + r * math.sin(theta)) / rho_res + 0.5) # 累加器加一 accumulator[rho][t] += 1 # 获取直线的参数 lines = [] for r in range(int(max_distance / rho_res)): for t in range(theta_num): if accumulator[r][t] > threshold: a = math.cos(t * theta_res * math.pi / 180.0) b = math.sin(t * theta_res * math.pi / 180.0) x0 = a * r * rho_res y0 = b * r * rho_res x1 = int(x0 + 1000 * (-b)) y1 = int(y0 + 1000 * (a)) x2 = int(x0 - 1000 * (-b)) y2 = int(y0 - 1000 * (a)) lines.append((x1, y1, x2, y2)) return lines ``` 该代码实现了一个简单的霍夫直线检测算法,输入参数为二值化图像,返回值为检测到的直线参数。注意,该代码实现霍夫直线检测算法可能存在一定的性能问题,仅用于学习和实验之用。如果需要高性能和高精度的霍夫直线检测算法,建议使用 OpenCV 库提供的相关函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值