Hough(霍夫变换) 基于Opencv2.4.9 和VS2012平台下编写
来源:互联网 发布:截断数据库日志 编辑:程序博客网 时间:2024/06/06 14:12
霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体。该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。霍夫变换于1962年由Paul Hough 首次提出[53],后于1972年由Richard Duda和Peter Hart推广使用[54],经典霍夫变换用来检测图像中的直线,后来霍夫变换扩展到任意形状物体的识别,多为圆和椭圆。
霍夫变换运用两个坐标空间之间的变换将在一个空间中具有相同形状的曲线或直线映射到另一个坐标空间的一个点上形成峰值,从而把检测任意形状的问题转化为统计峰值问题,上一节中已经介绍了车道的直线特征,本节中给出hough变换检测直线在Opencv+VS2012平台下编写的结果及代码。
下面是全部代码:
原图:
// Hough.cpp : 定义控制台应用程序的入口点。
//霍夫变换检测
//yyx20125084014 姚永祥
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include<iostream>
#define PI 3.1415926
using namespace std;
using namespace cv;
int _tmain(int argc, _TCHAR* argv[])
{
//【1】读取房子图像的原始图片
Mat image = imread ("C:\\fangzi.jpg");
Mat result;
cvtColor (image,result,CV_BGRA2GRAY);
Mat contours;
//边缘检测
Canny (result,contours,125,350);
vector<Vec2f> lines;
//霍夫变换,获得一组极坐标参数(rho,theta),每一对对应一条直线,保存到lines
HoughLines (contours,lines,1,PI/180,260); //第3,4个参数表示在(rho,theta)坐标系里横纵坐标的最小单位,即步长
vector<Vec2f>::const_iterator it = lines.begin ();
cout<<lines.size ()<<endl;
while(it != lines.end()){
float rho = (*it)[0];
float theta = (*it)[1];
if(theta<PI/4.||theta>3.*PI/4){
//画交点在上下两边的直线
Point pt1(rho/cos(theta),0);
Point pt2((rho-result.rows*sin(theta))/cos(theta),result.rows);
line(image,pt1,pt2,Scalar(255),1);
}
else {
//画交点在左右两边的直线
Point pt1(0,rho/sin(theta));
Point pt2(result.cols,(rho-result.cols*cos(theta)/sin(theta)));
line(image,pt1,pt2,Scalar(255),1);
}
++it;
}
//【2】建立输出窗口
namedWindow ("hough");
imshow("hough",image);
//【3】对霍夫曼边缘特征提取后的图片进行保存
imwrite ("C:\\Houghjiance.jpg",image );
waitKey (0);
return 0;
}
结果图:
- Hough(霍夫变换) 基于Opencv2.4.9 和VS2012平台下编写
- 【opencv2】直线hough变换
- 霍夫变换(Hough)
- 霍夫变换(Hough Transform)
- 霍夫变换(Hough Transform)
- 霍夫变换(Hough Transform)
- 霍夫变换(Hough Transformation)
- 霍夫变换(Hough Transform)
- 霍夫变换(Hough Transform)
- Hough transform霍夫变换
- [opencv] 霍夫变换Hough
- 霍夫变换(Hough Transform)
- 霍夫变换(Hough Transform)
- Hough transform(霍夫变换)
- vs2012 下 配置 opencv2.4.9
- vs2012下配置opencv2.4.9
- **角点检测(Harris)基于Opencv2.4.9版本+VS2012开发平台进行编**
- 基于Hough变换检测圆
- Smarty模板类内部原理
- 如何在Eclipse中查看Android API源码以及support包源码
- tjut 3435
- 分治理论讲解
- onInterceptTouchEvent和onTouchEvent调用时序
- Hough(霍夫变换) 基于Opencv2.4.9 和VS2012平台下编写
- android onTouchEvent和setOnTouchListener中onTouch的区别
- 如何隐藏UINavigationbar下面的黑线,swift版
- 关于UIView的autoresizingMask属性的研究
- Search 之Creating a Search Interface
- 转载:Android dispatchTouchEvent
- android 事件处理机制
- [Android应用]对GroupView中onInterceptTouchEvent方法的理解
- 关于inputStream.available()方法获取下载文件的总大小