微信公眾號:OpenCV學堂
關注獲取更多計算機視覺與深度學習知識
Blob分析

Blob分析函數與演示
-根據BLOB面積過濾-根據灰度/顏色值過濾-根據圓度過濾-根據長軸與短軸過濾-根據凹凸進行過濾
對應的參數列表如下:
SimpleBlobDetector::Params::Params()bool filterByAreabool filterByCircularitybool filterByColorbool filterByConvexitybool filterByInertiafloat maxAreafloat maxCircularityfloat maxConvexityfloat maxInertiaRatiofloat maxThresholdfloat minAreafloat minCircularityfloat minConvexityfloat minDistBetweenBlobsfloat minInertiaRatio
#include?"opencv2/opencv.hpp"
#include?
using?namespace?cv;
using?namespace?std;
int?main(int?argc,?char**?argv)
{
????//?加載圖像
????Mat?src?=?imread("D:/lena.jpg");
????Mat?gray;
????cvtColor(src,?gray,?COLOR_BGR2GRAY);
????cv::imshow("輸入圖像",?src);
????//?初始化參數設置
????SimpleBlobDetector::Params?params;
????params.minThreshold?=?10;
????params.maxThreshold?=?240;
????params.filterByArea?=?true;
????params.minArea?=?50;
????params.filterByCircularity?=?true;
????params.minCircularity?=?0.1;
????params.filterByConvexity?=?true;
????params.minConvexity?=?0.5;
????params.filterByInertia?=?true;
????params.minInertiaRatio?=?0.5;
????//?創建BLOB?Detetor
????Ptr?detector?=?SimpleBlobDetector::create(params);
????//?BLOB分析與顯示
????Mat?result;
????vector?keypoints;
????detector->detect(gray,?keypoints);
????for?(auto?kpt?:?keypoints)?{
????????std::cout?<"key?point?radius:?"?<std::endl;
????????cv::circle(src,?kpt.pt,?2,?cv::Scalar(0,?255,?0),?2,?8,?0);
????????cv::circle(src,?kpt.pt,?kpt.size/2,?cv::Scalar(255,?0,?255),?3,?8,?0);
????}
????imshow("Blob檢測-OpenCV學堂",?src);
????waitKey(0);
} 
特殊使用技巧
thresholdStep = 10;minThreshold = 50;maxThreshold = 220;minRepeatability = 2;minDistBetweenBlobs = 10;filterByColor = true;blobColor?=?0;filterByArea = true;minArea = 25;maxArea?=?5000;filterByCircularity = false;minCircularity = 0.8f;maxCircularity?=?std::numeric_limits::max(); filterByInertia = true;//minInertiaRatio = 0.6;minInertiaRatio = 0.1f;maxInertiaRatio?=?std::numeric_limits::max(); filterByConvexity = true;//minConvexity = 0.8;minConvexity = 0.95f;maxConvexity = std::numeric_limits::max(); collectContours = false;
static?void?validateParameters(const?SimpleBlobDetector::Params&?p)
{
??if?(p.thresholdStep?<=?0)
??????CV_Error(Error::StsBadArg,?"thresholdStep>0");
??if?(p.minThreshold?>?p.maxThreshold?||?p.minThreshold?0)
??????CV_Error(Error::StsBadArg,?"0<=minThreshold<=maxThreshold");
??if?(p.minDistBetweenBlobs?<=0?)
??????CV_Error(Error::StsBadArg,?"minDistBetweenBlobs>0");
??if?(p.minArea?>?p.maxArea?||?p.minArea?<=0)
??????CV_Error(Error::StsBadArg,?"0);
??if?(p.minCircularity?>?p.maxCircularity?||?p.minCircularity?<=?0)
??????CV_Error(Error::StsBadArg,?"0);
??if?(p.minInertiaRatio?>?p.maxInertiaRatio?||?p.minInertiaRatio?<=?0)
??????CV_Error(Error::StsBadArg,?"0);
??if?(p.minConvexity?>?p.maxConvexity?||?p.minConvexity?<=?0)
??????CV_Error(Error::StsBadArg,?"0);
} 推薦閱讀
Ubuntu系統下編譯OpenCV4.8源碼記錄
Pytoorch輕松學 – RetinaNet自定義對象檢測
基于OpenCV實現精準線線間距測量
OpenVINO2023異步回調流水線提升推理吞吐率
NNCF壓縮與量化YOLOv8模型與OpenVINO部署測試
技能 | 三種主流的深度學習模型部署框架
深度學習模型C++推理,推薦看看 OpenVINO2022
OpenCV4系統化學習路線圖(2023版)
掃碼查看 OpenCV4?系統化學習路線圖

作者新書
https://item.jd.com/10092255924058.html
學習課程有專屬答疑群
負責貼身答疑解惑
讀者專屬QQ群 :657875553
進群暗號:OpenCV4讀者
