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

python+opencv实现高斯平滑滤波

python+opencv实现阈值分割



(2016-5-10)到OpenCV-Python Tutorials’s documentation可以下载


功能:

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

注意:这里用的函数是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

效果图:

时间: 2024-10-22 10:18:13

python+opencv实现霍夫变换检测直线的相关文章

opencv笔记(十七)——使用霍夫变换检测直线

一般我们在检测物体轮廓的时候,会有检测直线的需求,这时可以用到OpenCV当中的霍夫变换实现. 霍夫变换的原理的简单阐述见:http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html#hough-lines 简单来讲,对于单个像素来说,它可能是由许多直线经过的,我们通过一个点可以构造无数条直线. 对于一个像素的位置(x, y),从笛卡尔坐标和极坐标两个角度,我们可以有      进而得到 上

OpenCV2学习笔记(八):使用霍夫变换检测直线和圆

在研究一幅图像时,常常会遇到一些平面或线性问题,直线在图像中频繁可见.这些富有意义的特征在物体识别等图像处理过程中扮演着重要的角色.本节主要记录一种经典的检测直线算法--霍夫变换(Hough Transform),用Hough变换检测图像中的直线和圆,开发平台为Qt5.3.2+OpenCV2.4.9. 一:Hough变换检测图像的直线 1.基础Hough变换 在霍夫变换中,直线用以下方程表示: 其中,参数表示一条直线到图像原点(左上角)的距离, 表示与直线垂直的角度.如下图所示,直线1的垂直线的

霍夫变换检测直线

图片经过边缘检测及二值化处理后是黑色的底,白色的线.把图片中每个白色像素点设为(Xi,Yi).定理:对于直角坐标系中的每一个点,在极坐标中有一条曲线ρ=Xicosθ+Yisinθ与其对应.分别使θ等于0,△θ,2△θ--π,便可求出对应的ρ值.将ρ也分成许多小段△ρ,这样极坐标就被分成了许多以(△ρ,△θ)为单元的小块.计算每一条曲线落在各小段中的次数.所有数据点变换完成后,对小单元进行检测,这样,落入次数较多的单元,说明此点为较多曲线的公共点,而这些曲线对应的(X,Y)平面上的点可以认为是共线

基于python+opencv的人脸检测+

人脸检测分为两种:一种是基于知识的,一种是基于深度学习的.深度不会学习 人脸识别属于目标检测,主要涉及两个方面: ①先对检测的物体进行概率统计,从而知道待检测对象的一些特征,建立其目标的检测模型 ②用得到的模型来匹配输入的图像,如果有匹配则则输出匹配的区域,否则什么也不做. 我们看到的图片和计算机不一样,计算机看到的是一串串数字矩阵,图片由多个像素组成,拿我们熟悉的RGB图像来说,每个像素又有红绿蓝三个通道,假如每个像素的单个通道由uint8类型字符组成,那么三通道的像素便会有24位,这是我们常

python+opencv实现高斯平滑滤波

功能: 创建两个滑动条来分别控制高斯核的size和σ的大小,这个程序是在阈值分割的那个程序上改动的.阈值分割程序在这 注意:由于σ=0时,opencv会根据窗口大小计算出σ,所以,从0滑动σ的滑动条时,会出现先边清晰又变模糊的现象 python+opencv实现阈值分割 python+opencv实现霍夫变换检测直线 (2016-5-10)到OpenCV-Python Tutorials's documentation!可以下载 代码: # -*- coding: utf-8 -*- impor

python+opencv实现阈值分割

最近老师留了几个作业,虽然用opencv很简单一句话就出来了,但是还没用python写过.在官方文档中的tutorial中的threshold里,看到可以创建两个滑动条来选择type和value,决定用python实现一下 注意python中的全局变量,用global声明 开始出现了一些问题,因为毁掉函数每次只能传回一个值,所以每次只能更新value,后来就弄了两个毁掉函数,这个时候,又出现了滑动其中一个,另一个的值就会变为默认值的情况,这个时候猜想是全局变量的问题,根据猜想改动之后果然是. 感

OpenCV笔记(十八)——使用霍夫变换检测圆圈

这些笔记的最初,我是以接近于源码分析的形式来梳理自己学习OpenCV的过程. 然而写下来,一是执行力,二是时间的问题,确实越写越马虎了.用我老师的话:观其大略了. 但是,暂时就这么写着吧. 在笔记<十七>中,我们简单地谈到了霍夫变换检测直线的原理,就是判断相邻像素点的值(x, y)对应的r-theta曲线是否能够相交,如果有足够多的相邻的像素点的曲线相交,我们就认为这些相邻的像素点构成一条直线. 圆圈亦然,只是把直线的方程替换成了圆的方程.除了极坐标的r,多了两个变量:Xcenter和Ycen

Python+OpenCV图像处理(十四)—— 直线检测

简介: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等).最基本的霍夫变换是从黑白图像中检测直线(线段). 2.Hough变换的原理是将特定图形上的点变换到一组参数空间上,根据参数空间点的累计结果找到一个极大值对应的解,那么这个解就对应着要寻找的几何形状的参数(比如说直线,那么就会得到直线的斜率k与常熟b,圆就会得到圆心与半径等等) 3.霍夫线变

Python下opencv使用笔记(十一)(详解hough变换检测直线与圆)

在数字图像中,往往存在着一些特殊形状的几何图形,像检测马路边一条直线,检测人眼的圆形等等,有时我们需要把这些特定图形检测出来,hough变换就是这样一种检测的工具. Hough变换的原理是将特定图形上的点变换到一组参数空间上,根据参数空间点的累计结果找到一个极大值对应的解,那么这个解就对应着要寻找的几何形状的参数(比如说直线,那么就会得到直线的斜率k与常熟b,圆就会得到圆心与半径等等). 关于hough变换,核心以及难点就是关于就是有原始空间到参数空间的变换上.以直线检测为例,假设有一条直线L,