很久之前学习过一段时间的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线段检测的更多相关文章

  1. OpenCV学习代码记录——轮廓(contour)检测

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

  2. OpenCV学习代码记录——人脸检测

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

  3. OpenCV学习代码记录—— Snake轮廓

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

  4. OpenCV学习代码记录——canny边缘检测

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

  5. Opencv学习笔记------Harris角点检测

    image算法测试iteratoralgorithmfeatures 原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/73 ...

  6. python 设计模式学习代码记录

    @工厂模式class Beijing: def printreslut(self): print("ok") class Shanghai: def printreslut(sel ...

  7. OpenCV 学习笔记03 直线和圆检测

    检测边缘和轮廓不仅重要,还经常用到,它们也是构成其他复杂操作的基础. 直线和形状检测与边缘和轮廓检测有密切的关系. 霍夫hough 变换是直线和形状检测背后的理论基础.霍夫变化是基于极坐标和向量开展的 ...

  8. OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现

    # OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-环 ...

  9. OpenCV学习 物体检测 人脸识别 填充颜色

    介绍 OpenCV是开源计算机视觉和机器学习库.包含成千上万优化过的算法.项目地址:http://opencv.org/about.html.官方文档:http://docs.opencv.org/m ...

随机推荐

  1. ECC校验

    ECC的全称是 Error Checking and Correction or Error correction Coding,是一种用于差错检测和修正的算法.NAND闪存在生产和使用中都会产生坏块 ...

  2. 同步一个 fork

    fork 了别人的仓库后,原作者又更新了仓库,如何将自己的代码和原仓库保持一致?本文将给你解答. 如何使用搜索引擎 其实这个问题并不难,我又被坑了.百度搜的东西不靠谱啊,以后这种问题一定要用英文在 G ...

  3. 访问Oracle数据库的工具【unfinished】

    ylbtech-Oracle:访问Oracle数据库的工具 访问Oracle数据库的工具 1. SQL*PLUS返回顶部 1.0, 1.0.1, 之network\admin\tnsnames.ora ...

  4. 移动端 h5开发相关内容总结——CSS篇

    1.移动端开发视窗体的加入 h5端开发以下这段话是必须配置的 <meta name="viewport" content="width=device-width, ...

  5. (转)【风宇冲】Unity3D教程宝典之Blur

    原创文章如需转载请注明:转载自风宇冲Unity3D教程学院                   BlurBlur模糊其实理解了以后非常简单.核心原理就是 1个点的颜色 并不用该点的颜色,而是用该点周围 ...

  6. mongoDB开发规范

    mongoDB库的设计 mongodb数据库命名规范:db_xxxx 禁止使用任何 " _ "(下划线)外的特殊字符 禁止使用数字打头的库名 数据库名最多为 64字符 mongoD ...

  7. 在Excel中输入超过10的带圈数字

    通过改变字体,可以在excel中输入1-20的带圈数字.对于某些人这些还不够用,那怎么办呢? 有了下面这个不知道是哪个大神做的字体,你就可以直接输到100啦 将字体文件文件粘贴至“C:\WINDOWS ...

  8. 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 ...

  9. Android中MVP模式与MVC模式比較(含演示样例)

    原文链接 http://sparkyuan.me/ 转载请注明出处 MVP 介绍 MVP模式(Model-View-Presenter)是MVC模式的一个衍生. 主要目的是为了解耦,使项目易于维护. ...

  10. 面试总结——Java高级工程师(三)

    https://blog.csdn.net/moneyshi/article/details/53086927