openCV实现Hough变换直线检测

转自:https://blog.csdn.net/xgmiao/article/details/8555246

 #include<cv.h>
#include <highgui.h>
#include <math.h>
 
int main(void)
{
	IplImage *src = cvLoadImage("D:\\xgmiao\\image\\1.jpg",0);
	if (src)
	{
		IplImage *dst = cvCreateImage(cvGetSize(src),8,1);
		IplImage *color_dst = cvCreateImage(cvGetSize(src),8,3);
		CvMemStorage *storage = cvCreateMemStorage();
		CvSeq *lines = 0;
		int i ;
		cvCanny(src,dst,50,200,3);
	
		cvCvtColor(dst,color_dst,CV_GRAY2BGR);
	#if 0
		lines = cvHoughLines2(dst,storage,CV_HOUGH_STANDARD,1,CV_PI/180,150,0,0);
		
		for (i=0;i<lines->total;i++)
		{
			float *line = (float *)cvGetSeqElem(lines,i);
			float rho = line[0];
			float theta = line[1];
			CvPoint pt1,pt2;
			double a = cos(theta);
			double b = sin(theta);
			if (fabs(a)<0.001)
			{
				pt1.x = pt2.x = cvRound(rho);
				pt1.y = 0;
				pt2.y = color_dst->height;
			}
			else if (fabs(b)<0.001)
			{
				pt1.y = pt2.y = cvRound(rho);
				pt1.x = 0;
				pt2.x = color_dst->width;
			}
			else
			{
				pt1.x = 0;
				pt1.y = cvRound(rho/b);
				pt2.x = cvRound(rho/a);
				pt2.y = 0;
			}
 
			cvLine(color_dst,pt1,pt2,CV_RGB(255,0,0),1,8);
		}
	#else
		lines = cvHoughLines2(dst,storage,CV_HOUGH_PROBABILISTIC,1,CV_PI/180,80,30,5);
		for (i=0;i<lines->total;i++)
		{
			CvPoint *line = (CvPoint *)cvGetSeqElem(lines,i);
			cvLine(color_dst,line[0],line[1],CV_RGB(255,0,0),1,CV_AA);
		}
	#endif
		cvNamedWindow("Source");
		cvShowImage("Source",src);
 
		cvNamedWindow("Hough");
		cvShowImage("Hough",color_dst);
 
		cvWaitKey(0);
 
		cvReleaseImage(&src);
		cvReleaseImage(&dst);
		cvReleaseImage(&color_dst);
		cvReleaseMemStorage(&storage);
		
		cvDestroyAllWindows();
		
		return 1;
	}
}

效果图:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值