不廢話,看我20行代碼搞定色塊提取與定位…….

問題來由

這個問題是誰問我的我已經不記得了,剛開始的時候他發了這張圖像給我,讓我給他看一下,我當時告訴他轉換一下色彩空間提取就好啦,後來我記得他在微信上有問了我一次,今天我整理文件看到這張圖又想起了,感覺他問了我好幾次我都沒回復挺不意思的,但是我實在不知道他是誰了,微信上消息太多,早已經把他淹沒了,加之我記憶力退化嚴重,思來想去只好寫篇文章告訴他,我回答了!如果看完感覺對你也有用,點在看支持即可!

先看看他發我的圖像文件吧
不廢話,看我20行代碼搞定色塊提取與定位…….
在來說說他的需求:
找到途中全部青色的區域,檢測出來,繪製中心點!他用霍夫變換,結果直接翻車了,原因其實我很理解,這個圖有很多梯度干擾,噪聲干擾,用了肯定翻車!然後他就問我怎麼辦?

解題思路

直接轉換到HSV色彩空間,得到如下結果:

不廢話,看我20行代碼搞定色塊提取與定位…….
然後我選擇5x5的開操作,完成之後得到
不廢話,看我20行代碼搞定色塊提取與定位…….

使用OpenCV輪廓發現,對輪廓擬合圓,求的圓心座標得到輸出結果如下:
不廢話,看我20行代碼搞定色塊提取與定位…….
怎麼樣,效果好嗎?

代碼實現

上述步驟的代碼演示,主要分爲如下步驟
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 \n", 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 圖像處理與視頻分析實戰教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章