(三)OpenCV图像处理

直接

  1. 直接用霍夫直线检测,效果差;
  2. 通过图像形态学操作来寻找直线,霍夫获取位置信息与显示。
#include <opencv2/opencv.hpp>#include <iostream>using namespace std;using namespace cv;Mat src,temp_ROI,dst;int threshold_value = 128;void DetectLine(int,void*);//Hough直线检测函数void MorphShapes_Hough(int, void*);//形态学+Hough直线检测int main(int argc, char** argv){src = imread("../path.jpg", 
  1. 直接用霍夫直线检测,效果差;
  2. 通过图像形态学操作来寻找直线,霍夫获取位置信息与显示。
#include <opencv2/opencv.hpp>#include <iostream>using namespace std;using namespace cv;Mat src,temp_ROI,dst;int threshold_value = 128;void DetectLine(int,void*);//Hough直线检测函数void MorphShapes_Hough(int, void*);//形态学+Hough直线检测int main(int argc, char** argv){src = imread("../path.jpg", IMREAD_GRAYSCALE);if (src.empty()){cout << "could not load image1..." << endl;return -1;}namedWindow("src", WINDOW_AUTOSIZE);imshow("src", src);Rect ROI = Rect(5, 5, src.cols - 5, src.rows -5);//感兴趣区域//去掉边缘temp_ROI = src(ROI);//把src的ROI区域给temp_ROI//namedWindow("ROI_dst", WINDOW_AUTOSIZE);//imshow("ROI_dst", temp_ROI);//createTrackbar("Threshold", "ROI_dst", &threshold_value, 255, DetectLine);//DetectLine(0,0);//霍夫直线检测 效果差//形态学+霍夫检测MorphShapes_Hough(0, 0);waitKey(0);return 0;}void DetectLine(int, void*){Mat Canny_edges;Canny(temp_ROI, Canny_edges, threshold_value, threshold_value * 2, 3, false);vector<Vec4f> plines;HoughLinesP(Canny_edges, plines, 1, CV_PI / 180.0, 30, 30.0, 0);cvtColor(Canny_edges, Canny_edges, COLOR_GRAY2BGR);for (size_t i = 0; i < plines.size(); i++){Vec4i Lines = plines[i];line(Canny_edges, Point(Lines[0], Lines[1]), Point(Lines[2], Lines[3]), Scalar(255, 0, 255), 2, 8);}imshow("ROI_dst", Canny_edges);return;}void MorphShapes_Hough(int, void*){//二值化Mat Threshold_img;threshold(temp_ROI, Threshold_img, 0,255, THRESH_BINARY_INV | THRESH_OTSU);imshow("Threshold_dst", Threshold_img);//自定义核Mat h_kernel = getStructuringElement(MORPH_RECT, Size(src.cols / 16, 1), Point(-1, -1));//水平结构元素//形态学梯度morphologyEx(Threshold_img, dst, MORPH_OPEN/*开操作,先腐蚀再膨胀*/, h_kernel, Point(-1, -1));imshow("Morphology", dst);//膨胀Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));dilate(dst, dst, kernel);imshow("Dilate", dst);//Hough检测vector<Vec4f> plines;HoughLinesP(dst, plines, 1, CV_PI / 180.0, 30, 30.0, 0);//Mat dst_img = temp_ROI.clone();cvtColor(temp_ROI, temp_ROI, COLOR_GRAY2BGR);for (size_t i = 0; i < plines.size(); i++){Vec4i Lines = plines[i];line(temp_ROI, Point(Lines[0], Lines[1]), Point(Lines[2], Lines[3]), Scalar(255, 0, 255), 2, 8);}imshow("ROI_dst", temp_ROI);return;}

src为:

输出结果:

(0)

相关推荐

  • 【学术论文】基于最小二乘法与霍夫变换的虹膜定位算法

    摘要 为解决定位虹膜内外边缘时因轮廓信息不足会出现的定位不准确或者失败问题,提出一种采用霍夫变换与最小二乘法相结合的定位算法.首先使用形态学开操作减少图像中孤立的小点,并利用自适应阈值算法二值化图像: ...

  • opencv python智能车道检测,助力无人驾驶

    近年来,基于人工智能的车道检测算法得到了广泛的研究.与传统的基于特征的方法相比,许多方法表现出了优越的性能.然而,当使用具有挑战性的图像时,其准确率通常仍在低80%或高90%之间,甚至更低. 准确可靠 ...

  • [OpenCV]经典霍夫变换原理

    本文主要讲述的是霍夫变换的一些内容,并加入一些在生活中的应用,希望能对读者对于霍夫变换的内容有所了解. 首先我先说的是,霍夫变换是一个特征提取技术.其可用于隔离图像中特定形状的特征的技术,应用在图像分 ...

  • OpenCV探索之路(十一):轮廓查找和多边形包围轮廓

    Canny一类的边缘检测算法可以根据像素之间的差异,检测出轮廓边界的像素,但它没有将轮廓作为一个整体.所以要将轮廓提起出来,就必须将这些边缘像素组装成轮廓. OpenCV中有一个很强大的函数,它可以从 ...

  • 【从零学习OpenCV 4】Canny算法

    小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为 ...

  • 31、 霍夫变换 霍夫变换是一种用于在...

    31. 霍夫变换 霍夫变换是一种用于在图像中查找直线.圆等形状的方法. 霍夫直线变换的基本理论是,二值图像中的任何点都可能是某条直线的一部分.如果通过斜率a和截距b对直线进行参数化,则原始图像中的一个 ...

  • python+opencv图像处理(三十九)

    MSR 又一学期开学季,感觉好久没说过话了,多说一会儿这个嗓子有点儿受不了了,老天啊,救救我吧...或许,我应该去学一门说话艺术之类的课? 之前简单写过Retinex理论以及单尺度SSR. 今天要写的 ...

  • python+opencv图像处理(三十八)

    Retinex理论 最近研究了下Retinex,这个算法用的地方还挺多的,较多是用在水下图像或者去雾等,还没有研究得太清楚,先做个笔记 . Retinex是Edwin.H.Land于1963年提出的建 ...

  • python+opencv图像处理(三十七)

    梯形高通滤波和指数高通滤波 大人的世界很精彩... 大人的世界很无奈... 大人的心思很复杂... 大人的心思猜不透... 1.梯形高通滤波 其传递函数如下: 式中,D0为截止频率,D1可以任取,但要 ...

  • python+opencv图像处理(三十六)

    理想和巴特沃斯高通滤波 大自然的鬼斧神工...... 低通滤波器是滤除高频分量,保留低频分量,主要是用于平滑图像,去除图像噪声的. 高通滤波器与之相对应,是滤除低频分量,保留高频分量,主要用来锐化边缘 ...

  • python+opencv图像处理(三十五)

    指数低通滤波器 最近好多事情,一件接一件,何时是个头,何时才能休... 1.指数低通滤波 它的传递函数如下:     H(u,v)=     式中,D0为截止频率,     D(u,v)也是从频率域的 ...

  • python+opencv图像处理(三十四)

    梯形低通滤波器 梯形低通滤波器类似上篇巴特沃斯低通滤波,只是其转移函数不同. 梯形低通滤波器的转移函数如下: 式中,D0为截止频率,D1可以任取,但要求D1>D0. 上两个都不能为负. D(u, ...

  • python+opencv图像处理(三十二)

    理想低通滤波 淅淅沥沥的雨天...... 天晴想下雨,下雨想天晴... 理想低通滤波是滤掉高频部分,仅允许低频通过,以去掉噪声,使图像得到平滑. 其实现步骤: 1. 将图像进行傅里叶变换,将低频移至中 ...

  • python+opencv图像处理(三十一)

    傅里叶变换 对图像的傅里叶变换,就是将图像从图像空间变换到频率空间,从而可以在频率域对图像进行处理. 1.傅里叶变换 傅里叶变换的理论在任何一本数字图像处理的书里都有,网上也有很多,这里就不再解释了, ...

  • python+opencv图像处理(三十)

    双边滤波 双边滤波是一种非线性的滤波方法,能够保持边界清晰的情况下有效的去除噪声,它拥有类似相机里美颜的效果. 双边滤波之所以能够做到保边去噪的效果,是由于它的有两个核:空间域核和值域核,比高斯滤波只 ...