- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Hough变换检测直线实验报告
一,实验要求
用hough算法检测图像中的直线算法。使用这一算法来求一幅图像中的所有大于规定长度的直线段,设规定的长度为20点。
二,Hough变换简介
Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。
图1 Hough变换
如上图所示,在图像空间,直线上一点转换到参数空间就是一条曲线,而且,图像空间同一直线上的点转换到参数空间的曲线一定相交于一点,即参数空间各曲线的交点对应着图像空间的一条直线,这样,检测参数空间曲线交点就检测出了图像空间的直线。
三,实验过程和结果分析
用Hough变换之前, 首先要对图像进行边缘检测的处理,也即霍夫线变换的直接输入只能是边缘二值图像。本实验基于VS2008和OPENCV来实现。实验的步骤如下:
(1)读入图像,转换成灰度图像
OPENCV中用cvLoadImage函数来读取图像,函数原型:IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR );
filename :要被读入的文件的文件名(包括后缀);
flags :指定读入图像的颜色和深度;
例如:cvLoadImage( fileame, -n1 ); //默认读取图像的原通道数
cvLoadImage( filename, 0 ); //强制转化读取图像为灰度图
cvLoadImage( filename, 1 ); //读取彩色图
进行边缘检测
本实验选择Canny算子的边缘检测,OPENCV中用Canny函数来进行Canny算子的边缘检测,函数原型为:void cvCanny( const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size=3 );
image:单通道输入图像
edges:单通道存储边缘的输出图像
threshold1 :第一个阈值
threshold2 :第二个阈值
aperture_size :算子内核大小
3,对检测出的二值图像进行Hough变换
OPENCV中用cvHoughLines2函数来进行Hough变换,函数原型为:
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:检测到的线段存储仓
Method:Hough 变换变量,是下面变量的其中之一
CV_HOUGH_STANDARD ——传统或标准 Hough 变换
CV_HOUGH_PROBABILISTIC——概率 Hough 变换
绘制连接两个点的线段,函数原型为:
void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1, int line_type=8, int shift=0 );
img 图像
pt1:线段的第一个端点
pt2:线段的第二个端点
Color:线段的颜色
Thickness:线段的粗细程度
line_type:线段的类型
8 (or 0) - 8-connected line(8邻接)连接 线
4 - 4-connected line(4邻接)连接线
CV_AA - antialiased:线条
Shift:坐标点的小数点位数
程序代码如下:
#include cv.h
#include iostream
#include highgui.h
using namespace std;
int main()
{
char *path=D:\\zhi2.png;
IplImage * src_Img=NULL;
src_Img=cvLoadImage(path ,1);//加载图像
if(!src_Img)
return -1;
//显示原图像
cvNamedWindow(E1,CV_WINDOW_AUTOSIZE);
cvShowImage(E1,src_Img)
文档评论(0)