【学习opencv第五篇】霍夫线变换

本文介绍如何使用霍夫变换检测图像中的直线,并通过OpenCV实现这一过程。文章详细展示了使用C++编程语言,结合霍夫变换函数cvHoughLines2进行边缘检测的具体步骤。

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

霍夫变换是一种在图像中寻找直线,圆及其他简单形状的方法。opencv支持两种不同的霍夫变换:标准霍夫变换(SHT)和累积概率霍夫变换(PPHT)。在opencv中可以使用同一个函数来使用两种算法。

相关函数如下:

CvSeq* cvHonghLines2(CvArr* image,  void* line_storage,int mehtod, double rho, double theta, int threshold,  double param1 =0, double param2 =0 );
image   输入 8-比特、单通道 (二值) 图像
line_storage  存储检测到的线段,可以是序列或者单行/单列矩阵
mehtod     Hough 变换变量
rho
    与象素相关单位的距离精度
theta  弧度测量的角度精度
threshold  阈值参数。如果相应的累计值大于 threshold, 则函数返回的这个线段
param1 和param2为与变换方法有关的参数

#include "StdAfx.h"
#include<cv.h>
#include<highgui.h>
#include<math.h>
int main()
{
	IplImage* sourceImage;
	sourceImage= cvLoadImage("大中南.jpg",0);
	IplImage* destImage=cvCreateImage(cvGetSize(sourceImage),8,1);
	IplImage* colorImage=cvCreateImage(cvGetSize(sourceImage),8,3);
	//分配空间,默认64KB
	CvMemStorage* storage=cvCreateMemStorage(0);
	CvSeq* lines=0;                     //指向所检测到的线的序列的第一条...
	
	//首先对源图像进行边缘检测,结果以灰度图显示,
	cvCanny(sourceImage,destImage,50,200,3);
	cvCvtColor(destImage,colorImage,CV_GRAY2BGR);
	
	lines=cvHoughLines2(//返回一个指向CvSeq序列结构的的指针,
		destImage,//要进行霍夫检测的图像,必须是8位的,
		storage,  //保存结果位置的指针,
		CV_HOUGH_PROBABILISTIC,
		1,        //这两个参数都是用来设置直线的分辨率的
		CV_PI/180,
		80,      //一个阈值
		30,
		10     //表示支持所返回的直线的点的数量
		);
	int index;     //index为直线的索引
	for(index=0;index<lines->total;index++)    //遍历每一条线
	{
		CvPoint* line=(CvPoint*)cvGetSeqElem(lines,index);
		cvLine(colorImage,line[0],line[1],CV_RGB(255,0,0),3,8);
	}

	cvNamedWindow("SOURCEIMAGE",1);
	cvShowImage("SOURCEIMAGE",sourceImage);
	
	cvNamedWindow("COLORIMAGE",1);
	cvShowImage("COLORIMAGE",colorImage);
	
	cvNamedWindow("HOUGH",1);
	cvShowImage("HOUGH",colorImage);
	cvWaitKey(0);
	return 0;
}
运行结果:


Reference《学习opencv》

 

 

 

转载于:https://www.cnblogs.com/dyllove98/archive/2013/06/10/3131220.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值