OpenCV学习代码记录——Hough线段检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录。
代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tree/master/OpenCVTest
效果

代码
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
// http://blog.csdn.net/zhaocj/article/details/50281537
int houghLineDetection()
{
// 加载原图像
cv::Mat src = cv::imread("../Image/houghline2.jpg");
if (src.empty()) {
puts("原图像读取失败!!!");
return -1;
}
cv::Mat gray(src.size(), CV_8UC1); // 原图的灰度图像
cv::cvtColor(src, gray, CV_BGR2GRAY);
cv::Mat edge(src.size(), CV_8UC1); // 边缘图像
cv::Mat dst(src.size(), src.type());// 绘制直线的目标图像、
cv::cvtColor(gray, dst, CV_GRAY2BGR); // 从灰度图转过来,便于后面绘制红色的线条
// 进行Canny边缘检测
cv::Canny(gray, edge, 50, 200, 3);
#if 0
// 定义输出数组,用于存储直线的角度和距离这两个变量
std::vector<cv::Vec2f> lines;
// 距离分辨率为1,角度分辨率为π/180,阈值为215
// 阈值的选取直接影响到输出直线的数量
cv::HoughLines(edge, lines, CV_HOUGH_PROBABILISTIC,
CV_PI / 180.0,215,0,0);
// 画直线
for (size_t i = 0; i < lines.size(); ++i) {
// 提取出距离和角度
float rho = lines[i][0];
float theta = lines[i][1];
// 定义两个点,确定一条直线
cv::Point p1, p2;
// 计算得到两个点的坐标
// (ρcosθ-1000sinθ,ρsinθ+1000cosθ),(ρcosθ+1000sinθ,ρsinθ-1000cosθ)
double a = cos(theta);
double b = sin(theta);
double x0 = a*rho;
double y0 = b*rho;
p1.x = cvRound(x0 + 1000 * (-b));
p1.y = cvRound(y0 + 1000 * a);
p2.x = cvRound(x0 - 1000 * (-b));
p2.y = cvRound(y0 - 1000 * a);
// 在灰度图上画宽度为2的红线
cv::line(dst, p1, p2, cv::Scalar(0, 0, 255), 2, 8);
}
#else
std::vector<cv::Vec4i> lines;
cv::HoughLinesP(edge, lines, CV_HOUGH_PROBABILISTIC,
CV_PI / 180.0, 80, 30, 10);
for (size_t i = 0; i < lines.size(); ++i) {
cv::line(dst, cv::Point(lines[i][0], lines[i][1]),
cv::Point(lines[i][2], lines[i][3]), cv::Scalar(0, 0, 255), 2, 8);
}
#endif
// 创建窗口显示原图和目标图
cv::namedWindow("src");
cv::namedWindow("dst");
cv::imshow("src", src);
cv::imshow("dst", dst);
cv::imshow("edge", edge);
// 等待按键退出
cv::waitKey();
return 0;
}
OpenCV学习代码记录——Hough线段检测的更多相关文章
- OpenCV学习代码记录——轮廓(contour)检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- OpenCV学习代码记录——人脸检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- OpenCV学习代码记录—— Snake轮廓
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- OpenCV学习代码记录——canny边缘检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- Opencv学习笔记------Harris角点检测
image算法测试iteratoralgorithmfeatures 原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/73 ...
- python 设计模式学习代码记录
@工厂模式class Beijing: def printreslut(self): print("ok") class Shanghai: def printreslut(sel ...
- OpenCV 学习笔记03 直线和圆检测
检测边缘和轮廓不仅重要,还经常用到,它们也是构成其他复杂操作的基础. 直线和形状检测与边缘和轮廓检测有密切的关系. 霍夫hough 变换是直线和形状检测背后的理论基础.霍夫变化是基于极坐标和向量开展的 ...
- OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现
# OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-环 ...
- OpenCV学习 物体检测 人脸识别 填充颜色
介绍 OpenCV是开源计算机视觉和机器学习库.包含成千上万优化过的算法.项目地址:http://opencv.org/about.html.官方文档:http://docs.opencv.org/m ...
随机推荐
- ECC校验
ECC的全称是 Error Checking and Correction or Error correction Coding,是一种用于差错检测和修正的算法.NAND闪存在生产和使用中都会产生坏块 ...
- 同步一个 fork
fork 了别人的仓库后,原作者又更新了仓库,如何将自己的代码和原仓库保持一致?本文将给你解答. 如何使用搜索引擎 其实这个问题并不难,我又被坑了.百度搜的东西不靠谱啊,以后这种问题一定要用英文在 G ...
- 访问Oracle数据库的工具【unfinished】
ylbtech-Oracle:访问Oracle数据库的工具 访问Oracle数据库的工具 1. SQL*PLUS返回顶部 1.0, 1.0.1, 之network\admin\tnsnames.ora ...
- 移动端 h5开发相关内容总结——CSS篇
1.移动端开发视窗体的加入 h5端开发以下这段话是必须配置的 <meta name="viewport" content="width=device-width, ...
- (转)【风宇冲】Unity3D教程宝典之Blur
原创文章如需转载请注明:转载自风宇冲Unity3D教程学院 BlurBlur模糊其实理解了以后非常简单.核心原理就是 1个点的颜色 并不用该点的颜色,而是用该点周围 ...
- mongoDB开发规范
mongoDB库的设计 mongodb数据库命名规范:db_xxxx 禁止使用任何 " _ "(下划线)外的特殊字符 禁止使用数字打头的库名 数据库名最多为 64字符 mongoD ...
- 在Excel中输入超过10的带圈数字
通过改变字体,可以在excel中输入1-20的带圈数字.对于某些人这些还不够用,那怎么办呢? 有了下面这个不知道是哪个大神做的字体,你就可以直接输到100啦 将字体文件文件粘贴至“C:\WINDOWS ...
- Install SVN (Subversion) Server on Fedora 20/19, CentOS/Red Hat (RHEL) 6.5/5.10
Install SVN (Subversion) Server on Fedora 20/19, CentOS/Red Hat (RHEL) 6.5/5.10 Updated by JR on Mar ...
- Android中MVP模式与MVC模式比較(含演示样例)
原文链接 http://sparkyuan.me/ 转载请注明出处 MVP 介绍 MVP模式(Model-View-Presenter)是MVC模式的一个衍生. 主要目的是为了解耦,使项目易于维护. ...
- 面试总结——Java高级工程师(三)
https://blog.csdn.net/moneyshi/article/details/53086927