C++代码
#include#include using namespace cv; using namespace std; int main() { Mat image = imread("path to image", IMREAD_GRAYSCALE); Mat src; medianBlur(image, image, 5); threshold(image, src, 150, 255, cv::THRESH_BINARY); // 初始化BLOB参数 SimpleBlobDetector::Params params; params.minDistBetweenBlobs = 0.0f; params.filterByInertia = false; params.filterByConvexity = false; params.filterByColor = false; params.filterByCircularity = false; params.filterByArea = false; // 声明根据面积过滤,设置最大与最小面积 params.filterByArea = true; params.minArea = 3000.0f; params.maxArea = 22000.0f; // 声明根据圆度过滤,设置最大与最小圆度 params.filterByCircularity = true; params.minCircularity = 0.7; params.maxCircularity = 1.0; // 凸包形状分析 - 过滤凹包 //params.filterByConvexity = true; //params.minConvexity = 0.5; //params.minConvexity = 1.0; // 参数初始化BLOB检测器, Ptr detector = SimpleBlobDetector::create(params); vector keypoints; // 检测得到特征与绘制特征 detector->detect(src, keypoints, Mat()); Mat kp_image; drawKeypoints(src, keypoints, kp_image, Scalar(255, 0, 0), DrawMatchesFlags::DRAW_RICH_KEYPOINTS); cout << "半径:" << keypoints[0].size/2 << endl; cout << "圆心坐标:" << keypoints[0].pt << endl; imshow("keypoints", kp_image); waitKey(0); return 0; }



