不废话,看我20行代码搞定色块提取与定位…….

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不废话,看我20行代码搞定色块提取与定位…….相关的知识,希望对你有一定的参考价值。

问题来由

这个问题是谁问我的我已经不记得了,刚开始的时候他发了这张图像给我,让我给他看一下,我当时告诉他转换一下色彩空间提取就好啦,后来我记得他在微信上有问了我一次,今天我整理文件看到这张图又想起了,感觉他问了我好几次我都没回复挺不意思的,但是我实在不知道他是谁了,微信上消息太多,早已经把他淹没了,加之我记忆力退化严重,思来想去只好写篇文章告诉他,我回答了!如果看完感觉对你也有用,点在看支持即可!

先看看他发我的图像文件吧
技术图片
在来说说他的需求:
找到途中全部青色的区域,检测出来,绘制中心点!他用霍夫变换,结果直接翻车了,原因其实我很理解,这个图有很多梯度干扰,噪声干扰,用了肯定翻车!然后他就问我怎么办?

解题思路

直接转换到HSV色彩空间,得到如下结果:

技术图片
然后我选择5x5的开操作,完成之后得到
技术图片

使用OpenCV轮廓发现,对轮廓拟合圆,求的圆心坐标得到输出结果如下:
技术图片
怎么样,效果好吗?

代码实现

上述步骤的代码演示,主要分为如下步骤
1.加载图像并转换到HSV色彩空间,得到mask
2.根据mask二值图像,进行形体学处理
3.使用轮廓发现,找到所有最外层轮廓
4.对轮廓进行圆拟合,得到圆心与半径,然后绘制
代码如下:

 1#include <opencv2/opencv.hpp>
 2#include <iostream>
 3
 4using namespace cv;
 5using namespace std;
 6
 7int main(int argc, char** argv) {
 8    Mat image = imread("D:/images/zsxq/zsxq_20.png");
 9    imshow("input", image);
10
11    // 色彩空间转换
12    Mat hsv, mask;
13    cvtColor(image, hsv, COLOR_BGR2HSV);
14    inRange(hsv, Scalar(40,43, 46), Scalar(50, 255, 255), mask);
15    imshow("mask", mask);
16    imwrite("D:/mask.png", mask);
17
18    // 形态学开操作
19    Mat se = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));
20    morphologyEx(mask, mask, MORPH_OPEN, se);
21    imshow("binary", mask);
22    imwrite("D:/binary.png", mask);
23
24    // 轮廓发现
25    vector<vector<Point>> contours;
26    vector<Vec4i> hiearchy;
27    findContours(mask, contours, hiearchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
28    for (int i = 0; i < contours.size(); i++) {
29        // 圆拟合
30        RotatedRect rrt = fitEllipse(contours[i]);
31        Point ct = rrt.center;
32        int h = rrt.size.height;
33        int w = rrt.size.width;
34        printf("height : %d, width : %d 
", h, w);
35        circle(image, ct, 2, Scalar(0, 0, 255), 2, 8);
36        circle(image, ct, (h + w) / 4, Scalar(255, 0, 0), 2, 8, 0);
37    }
38
39    // 显示输出
40    imshow("result", image);
41    imwrite("D:/result.png", image);
42    waitKey(0);
43    return 0;
44}

希望他会看到,如果看到给我留言知道一下!最后跟大家道歉一下,代码超过20行了@_@!!!!

学习OpenCV4图像处理与二值分析教程,
你也可以跟我一样快速解决此类问题
OpenCV4 图像处理与视频分析实战教程

以上是关于不废话,看我20行代码搞定色块提取与定位…….的主要内容,如果未能解决你的问题,请参考以下文章

看我如何用 20 行代码改变女神看我的眼神

图片提取文字功能很神奇?Java几行代码搞定它!

几行代码轻松搞定python的sqlite3的存取

10行代码搞定移动web端自定义tap事件

opencv-python基础用法详细代码-图片加载-ROI-边缘滤波-二值化-轮廓提取-膨胀腐蚀等

MUI百度地图定位功能