C++-OpenCV(2)-Blob检测

本文介绍了如何使用OpenCV进行Blob(二值图像中的连通区域)检测,通过设置面积、阈值等参数来过滤图像特征。首先加载图像,然后配置SimpleBlobDetector参数,如最小和最大阈值、最小面积等。接着,检测关键点并用圆进行标记。代码示例展示了完整的检测和标注过程,帮助理解Blob检测在灰度图像分析中的应用。
摘要由CSDN通过智能技术生成

前偏讲的是0-255的二值图像,Blob 是对灰度图像的检测。
可根据面积、阈值、圆度、椭圆、凹凸性进行图像的过滤。
实现步骤:
//1.载入图片
//2.设置检测参数
//3.把检测的内容放入keyPoint中
//4.画圆
上代码:
 

Mat img = imread("D:/OpenCVPrj/WangYi/MOpenCV_class4/images/blob_detection.jpg", IMREAD_GRAYSCALE);
	imshow("input", img);

	// Set up detector with default parameters
	//Ptr<SimpleBlobDetector> detector = SimpleBlobDetector::create();
	// Setup SimpleBlobDetector parameters.
	SimpleBlobDetector::Params params;

	// Change thresholds
	params.minThreshold = 10;
	params.maxThreshold = 200;

	// Filter by Area.
	params.filterByArea = true;
	params.minArea = 50;

	// Filter by Circularity
	//params.filterByCircularity = true;
	//params.minCircularity = 0.1;

	 Filter by Convexity
	//params.filterByConvexity = true;
	//params.minConvexity = 0.87;

	 Filter by Inertia
	//params.filterByInertia = true;
	//params.minInertiaRatio = 0.01;

	Ptr<SimpleBlobDetector> detector = SimpleBlobDetector::create(params);

	//检测完的内容就在keypoints
	std::vector<KeyPoint> keypoints;
	detector->detect(img, keypoints);

	// Mark blobs using image annotation concepts we have studied so far
	int x, y;
	int radius;
	double diameter;
	cvtColor(img, img, COLOR_GRAY2BGR);
	for (int i = 0; i < keypoints.size(); i++) 
	{
		//圆心的位置
		KeyPoint k = keypoints[i];
		Point keyPt;
		keyPt = k.pt;
		x = (int)keyPt.x;
		y = (int)keyPt.y;
		// Mark center in BLACK
		circle(img, Point(x, y), 5, Scalar(255, 0, 0), -1);
		//得到直径和半径 Get radius of coin
		diameter = k.size;
		radius = (int)diameter / 2.0;
		// Mark blob in GREEN
		circle(img, Point(x, y), radius, Scalar(0, 255, 0), 2);
	}

	imshow("Image", img);
	waitKey(0);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值