java+对图像进行直线检测_Opencv Hough算法实现图片中直线检测

本文介绍了如何使用OpenCV的Hough变换在Java中实现图像直线检测。通过Canny边缘检测和HoughLinesP函数,结合滑动条调整阈值,动态展示不同检测效果。
摘要由CSDN通过智能技术生成

本文实例为大家分享了Opencv Hough算法实现直线检测的具体代码,供大家参考,具体内容如下

(1)载入需检测的图及显示原图

Mat g_srcImage = imread("C:\\Users\\lenovo\\Pictures\\Saved Pictures\\Q.jpg"); //图片所放路径

imshow("【原始图】", g_srcImage);

(2)为显示不同的效果图而设置滑动条

namedWindow("【效果图】", 1);

createTrackbar("值", "【效果图】", &g_nthreshold, 200, on_HoughLines);

(3)图像处理及显示

//进行边缘检测和转化为灰度图

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()

//定义局部变量储存全局变量

Mat dstImage = g_dstImage.clone();

Mat midImage = g_midImage.clone();

//调用HoughLinesP函数

vector 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)源代码:

#include

#include

#include

using namespace std;

using namespace cv;

Mat g_srcImage, g_dstImage, g_midImage;//原始图、中间图和效果图

vector 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 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)原图:

50627241cc94faf605b047f98d7dd690.png

效果图(调节滑条显示不同结果图):

值为100时:

811de6c03ca37b868e3ad84aa912f349.png

值为23时:

b8f30cc15ab3a234990ab3dad5e79202.png

值为60时:

21515b69085dcd91bdf51b05f4fa9af2.png

值为126时:

221f467ab2eb0fb0aa1959dd22715db5.png

值为184时:

0e0c87439650130608457c8728594f28.png

您可能感兴趣的文章:OpenCV利用霍夫变换进行直线检测OpenCV霍夫变换(Hough Transform)直线检测详解利用Opencv中Houghline方法实现直线检测Java+opencv3.2.0实现hough直线检测OpenCV实现图像的直线检测

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值