资源简介
霍夫线变换源代码, 有注释方便快速掌握源代码。 希望能够帮助大家。
代码片段和文件信息
int main( int argc char** argv )
{
Mat src edgecolor_edge;
src=imread(“building.jpg“);
if(!src.data)
return -1;
Canny(srcedge502003);
cvtColor(edge color_edge CV_GRAY2BGR);
vector lines; //保存直线的首端和尾端。
HoughLinesP(edge lines 1 CV_PI/180 80 30 10);
for( size_t i = 0; i {
Vec4i l = lines[i];
line(color_edge Point(l[0] l[1]) Point(l[2] l[3]) Scalar(00255) 2);
}
namedWindow( “lines“ CV_WINDOW_AUTOSIZE );
imshow( “lines“ color_edge );
waitKey(0);
return 0;
}
static void
icvHoughLinesProbabilistic( CvMat* image
float rho float theta int threshold
int lineLength int lineGap
CvSeq *lines int linesMax ) //
{
//accum 为累加器矩阵,mask 为掩码矩阵
cv::Mat accum mask; //收集图像中的所有非零点保存在掩码矩阵中 非零点就是边缘点
cv::vector trigtab; // 用于存储事先计算好的正弦和余弦值
// 开辟一段内存空间
cv::MemStorage storage(cvCreateMemStorage(0));
// 用于存储特征点坐标,即边缘像素的位置
CvSeq* seq; //??? seq 为所有边缘点坐标位置的序列
CvSeqWriter writer; //???存储序列容器
int width height; // 图像的宽和高
int numangle numrho; // 角度和距离的离散数量
float ang; //普通变量
int r n count; // count用来得到边缘点的数量
CvPoint pt; //像素点
float irho = 1 / rho; // 距离分辨率的倒数
CvRNG rng = cvRNG(-1); // 随机数
const float* ttab; // 向量 trigtab 的地址指针
uchar* mdata0; // 矩阵 mask 的地址指针
// 确保输入图像的正确性
CV_Assert(CV_IS_MAT(image) && CV_MAT_TYPE(image->type) == CV_8UC1 );
width = image->cols; // 提取出输入图像的宽
height = image->rows; // 提取出输入图像的高
// 由角度和距离分辨率,得到角度和距离的离散数量
//numangle霍夫空间的 wigth也就是 theta的个数,theta为一个单位
numangle = cvRound(CV_PI / theta); //霍夫空间的 wigth cvRound(double value):对一个double型的数进行四舍五入,并返回一个整型数
numrho = cvRound(((width + height) * 2 + 1) / rho);//霍夫空间的 hight 为什么hight是这么算???
// 创建累加器矩阵,即霍夫空间
accum.create(numangle numrho CV_32SC1);
// 创建掩码矩阵,大小与输入图像相同
mask.create(height width CV_8UC1); //为什么要创建掩码矩阵呢
// 定义 trigtab 的大小,因为要存储正弦和余弦值,所以长度为角度离散数的 2 倍
trigtab.resize(numangle*2);
// 累加器矩阵清零
accum = cv::Scalar(0);
// 避免重复计算,事先计算好所需的所有正弦和余弦值
for(ang = 0 n = 0; n < numangle; ang += theta n++)
{
trigtab[n*2] = (float)(cos(ang) * irho); // irho=1 是 距离分辨率的倒数
trigtab[n*2+1] = (float)(sin(ang) * irho);
}
// 赋值首地址
ttab = &trigtab[0]; // ttab 是 向量 trigtab 的地址指针
mdata0 = mask.data; //mdata0 是 掩码矩阵 mask 的地址指针
// 开始写入序列
cvStartWriteSeq( CV_32SC2 sizeof(CvSeq) sizeof(CvPoint) storage &writer );
// stage 1. collect non-zero image points
// 收集图像中的所有非零点保存在掩码矩阵中,
//因为输入图像是边缘图像,所以非零点就是边缘点
for(pt.y = 0 cou
- 上一篇:底部导航栏.rar
- 下一篇:LSD直线检测源代码
相关资源
- proteus_24C08—有注释(proteus里面使用的
- 西门子smart200 485通讯有注释.smart
- SAML协议交互,实现工程Demo有注释
- 答题卡识别
- 在FPGA中实现DDS波形可选,频率可调,
- mnist包含数据集利用Lenet实现.zip
- 25个汇编小程序案例
- qt项目扫雷游戏(有注释)
- 2018吉林省数学建模竞赛A题__自己做的
- 利用Opencv3.2中的DPM模块,实现DPM算法
- 基于QT的简单TCP编程程序,实现连接和
- OpenCV基于霍夫变换实现对圆形物体的
- 浅墨的opencv学习代码,有注释,前十
- 基于单片机的密码锁实现程序有注释
- nrf2401程序(收发都有注释清晰)
- 霍夫变换检测圆和直线
- 霍夫变换检测圆
- 网络爬虫,多功能,有界面显示,代
- 霍夫变换检测和定位圆
- 霍夫变换找圆.zip
- 基于linux的飞鸽传书软件源代码有注释
- 广义霍夫变换的详细介绍
- MF RC500的单片机源程序有注释
- pca降维,有注释的,直接运行 你值得
- opencv中自带peopledetect代码有注释
- 霍夫变换对视频中圆的识别
- 51 简易信号发生器 程序代码 有注释
- PCA所用到得程序完美解释,有有注释
评论
共有 条评论