- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Opencv Hough算法实现图片中直线检测由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例为大家分享了Opencv Hough算法实现直线检测的具体代码,供大家参考,具体内容如下 。
(1)载入需检测的图及显示原图 。
1
2
|
Mat g_srcImage = imread(
"C:\\Users\\lenovo\\Pictures\\Saved Pictures\\Q.jpg"
);
//图片所放路径
imshow(
"【原始图】"
, g_srcImage);
|
(2)为显示不同的效果图而设置滑动条 。
1
2
|
namedWindow(
"【效果图】"
, 1);
createTrackbar(
"值"
,
"【效果图】"
, &g_nthreshold, 200, on_HoughLines);
|
(3)图像处理及显示 。
1
2
3
4
5
6
7
8
9
10
|
//进行边缘检测和转化为灰度图
Canny(g_srcImage, g_midImage, 50, 200, 3);
//进行一次canny边缘检测
cvtColor(g_midImage, g_dstImage, CV_GRAY2BGR);
//转化边缘检测后的图为灰度图
//调用一次回调函数,调用一次HoughLinesP函数
on_HoughLines(g_nthreshold, 0);
HoughLinesP(g_midImage, g_lines, 1, CV_PI / 180, 80, 50, 10);
//显示效果图
imshow(
"【效果图】"
, g_dstImage);
waitKey(0);
return
0;
|
(4)主要函数:on_HoughLines() 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//定义局部变量储存全局变量
Mat dstImage = g_dstImage.clone();
Mat midImage = g_midImage.clone();
//调用HoughLinesP函数
vector<Vec4i> mylines;
HoughLinesP(midImage, mylines, 1, CV_PI / 180, g_nthreshold + 1, 50, 10);
//循环遍历绘制每一条线段
for
(
size_t
i = 0; i < mylines.size(); i++)
{
Vec4i l = mylines[i];
line(dstImage, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(23, 180, 55), 1, CV_AA);
}
//显示图像
imshow(
"【效果图】"
, dstImage);
|
(5)源代码:
。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using
namespace
std;
using
namespace
cv;
Mat g_srcImage, g_dstImage, g_midImage;
//原始图、中间图和效果图
vector<Vec4i> g_lines;
//定义一个矢量结构g_lines用于存放得到的线段矢量集合
//变量接收的TrackBar位置参数
int
g_nthreshold = 100;
static
void
on_HoughLines(
int
,
void
*);
//回调函数
static
void
ShowHelpText();
int
main()
{
//改变console字体颜色
system
(
"color 3F"
);
ShowHelpText();
//载入原始图和Mat变量定义
Mat g_srcImage = imread(
"C:\\Users\\lenovo\\Pictures\\Saved Pictures\\Q.jpg"
);
//显示原始图
imshow(
"【原始图】"
, g_srcImage);
//创建滚动条
namedWindow(
"【效果图】"
, 1);
createTrackbar(
"值"
,
"【效果图】"
, &g_nthreshold, 200, on_HoughLines);
//进行边缘检测和转化为灰度图
Canny(g_srcImage, g_midImage, 50, 200, 3);
//进行一次canny边缘检测
cvtColor(g_midImage, g_dstImage, CV_GRAY2BGR);
//转化边缘检测后的图为灰度图
//调用一次回调函数,调用一次HoughLinesP函数
on_HoughLines(g_nthreshold, 0);
HoughLinesP(g_midImage, g_lines, 1, CV_PI / 180, 80, 50, 10);
//显示效果图
imshow(
"【效果图】"
, g_dstImage);
waitKey(0);
return
0;
}
static
void
on_HoughLines(
int
,
void
*)
{
//定义局部变量储存全局变量
Mat dstImage = g_dstImage.clone();
Mat midImage = g_midImage.clone();
//调用HoughLinesP函数
vector<Vec4i> mylines;
HoughLinesP(midImage, mylines, 1, CV_PI / 180, g_nthreshold + 1, 50, 10);
//循环遍历绘制每一条线段
for
(
size_t
i = 0; i < mylines.size(); i++)
{
Vec4i l = mylines[i];
line(dstImage, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(23, 180, 55), 1, CV_AA);
}
//显示图像
imshow(
"【效果图】"
, dstImage);
}
static
void
ShowHelpText()
{
//输出一些帮助信息
printf
(
"\n\n\n\t通过调整滚动条观察图像的不同效果~\n\n"
);
printf
(
"\n\n\t\t\t by浅墨"
);
}
|
(6)原图:
效果图(调节滑条显示不同结果图):
值为100时:
值为23时:
。
值为60时:
值为126时:
。
值为184时:
。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://blog.csdn.net/myclass1312/article/details/80456584 。
最后此篇关于Opencv Hough算法实现图片中直线检测的文章就讲到这里了,如果你想了解更多关于Opencv Hough算法实现图片中直线检测的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
这一章实现的连接线,目前仅支持直线连接,为了能够不影响原有的其它功能,尝试了2、3个实现思路,最终实测这个实现方式目前来说最为合适了。 请大家动动小手,给我一个免费的 Star 吧~ 大家
本章分享一下如何使用 Konva 绘制基础图形:矩形、直线、折线,希望大家继续关注和支持哈! 请大家动动小手,给我一个免费的 Star 吧~ 大家如果发现了 Bug,欢迎来提 Issue
本章响应小伙伴的反馈,除了算法自动画连接线(仍需优化完善),实现了可以手动绘制直线、折线连接线功能。 请大家动动小手,给我一个免费的 Star 吧~ 大家如果发现了 Bug,欢迎来提 Is
我有一条线(两点(x,y)(x1,y1))和一个带有焦点(rx,ry)的矩形。我需要帮助找出线和矩形之间的碰撞点,C++ 中的一个例子会有所帮助。 最佳答案 我不知道如何仅用“焦点”来表示矩形。您将需
让我们画一条线和一个圆: canvas.create_line(x0,y0,x1,y1) canvas.create_oval(x0,y0,x1,y1) 如何计算每个像素的像素数? 最佳答案 你不能。
本文实例讲述了php使用gd2绘制基本图形。分享给大家供大家参考,具体如下: 应用GD2函数可以绘制的图形有多种,最基本的图形包括条、圆、方形等。无论开发人员绘制多么复杂的图形,都是在这些最基本的
我已经尝试了所有改变颜色的方法: call s:h("Underlined", {"fg": s:norm, "gui": "underline", "cterm": "underline"})
为什么以下行有时会在 chrome 开发控制台中产生消息“未定义不是函数”: (callbackOrUndefined || function() {})(); 这个想法是,如果回调为真,即函数,则执
我想在 MS Chart 中实现直线(分段拟合)图表。 我知道 X 轴上的点 [最小值 = 1.4,最大值 = 2.2]。我已将所有这些点都放在折线图上。 现在的要求是我如何知道 X 轴上的点 [最小
所以我正在使用 charts.js http://www.chartjs.org/我试图使 2 个点之间的线是直线而不是弯曲的,没有明显的原因。 现在看起来是这样的 http://imgur.com/
我已将我的机器人发布到 Azure。现在我要开发自己的聊天用户界面。我想在 JavaScript 中使用 Direct Line API 来调用机器人。 如何在 JavaScript 中使用 Dire
这个有点难解释。我有一个整数列表。因此,例如,[1, 2, 4, 5, 8, 7, 6, 4, 1] - 当根据元素编号绘制时,它类似于凸图。我如何以某种方式从列表中提取此“形状”特征?它不必特别准确
我在学习 javaScript 和 jQuery 的第一周,我正在尝试制作一些动画。 基本上我想要做的就是让这些箭头从屏幕开始,从一侧进入,通过 throw 目标,然后离开屏幕的另一侧。 理想情况下,
假设我有一个向导并且有 3 个部分,假设它是这样的。 [A]----[B]----[C] 假设当前在范围内选择了 A。这是一个彩色的红色圆圈。当 B 在范围内被选中时,就可以移动一个对象(假设一条彩色
我正在使用 botframework-directlinejs NodeJS SDK 为我的机器人前端实现一个新 channel 。该 channel 将提供一些自定义反向 channel 功能;但是
我正在使用直线执行 hql 查询。该作业似乎没有出现在 HDP 2.6 上 Spark History 服务器的资源管理器中。如何让它运行在 Yarn 上? 谢谢 最佳答案 Beeline 是一个 A
我目前正在尝试找到一种如何使用 Google Maps Api V3 获得直线路线的方法。 我已经设法使用地理编码和方向服务来获取从 A 点到 B 点的路线,包括两条替代路线。我还尝试过“无高速公路”
我有一个简单的 Canvas html5。它可以通过选择选项绘制一些形状,如直线、圆形、矩形、多边形,但现在我想让所有绘制都可拖动(如果可能的话)可调整大小,没有 3 部分库,只有纯 JS。
我正在使用在 Kerberos 中添加的帐户启动 beeline 来测试 Sentry: beeline -u "jdbc:hive2://IP:10000/;principal=test_table
我正在使用普通的 html/javascript Canvas (无库)。我有一种从两点计算 Angular 方法,我的理论是,我获取 Angular 并通过循环所需的水平距离 (x) 并对该 Ang
我是一名优秀的程序员,十分优秀!