学习来自OpenCV基础(10)使用OpenCV进行Blob检测
文章目录
1、cv2.SimpleBlobDetector_create 中文文档
cv2.SimpleBlobDetector_create 是 OpenCV 库中用于创建斑点检测器(Blob Detector)的函数。斑点检测是计算机视觉中的一个重要任务,用于检测图像中的小而明亮的区域,通常称为斑点或斑块。下面是 cv2.SimpleBlobDetector_create 函数的中文文档,包括其参数和用法:
一、函数概述
cv2.SimpleBlobDetector_create([params])
- 功能:创建一个 SimpleBlobDetector 对象,用于在图像中检测斑点。
- 参数:
params(可选):一个 SimpleBlobDetector_Params 对象,用于设置斑点检测器的参数。如果未提供,则使用默认参数。
二、参数详解
SimpleBlobDetector_Params 对象包含以下参数,用于调整斑点检测器的行为:
阈值相关参数:
- minThreshold:用于阈值处理的最小值。
- maxThreshold:用于阈值处理的最大值。
- thresholdStep:在 minThreshold 和 maxThreshold 之间递增的步长。
Blob大小参数:
- filterByArea:是否按斑点面积过滤斑点。
- minArea:用于过滤的最小斑点面积。
- maxArea:用于过滤的最大斑点面积。
Blob形状参数:
- filterByCircularity:是否按斑点圆度过滤斑点。
- minCircularity:用于过滤的最小圆度值(范围从0到1,其中1表示完美的圆)。
- maxCircularity:用于过滤的最大圆度值。
Blob凸性参数:
- filterByConvexity:是否按斑点凸性过滤斑点。
- minConvexity:用于过滤的最小凸性值(范围从0到1,其中1表示完全凸的斑点)。
Blob惯性比参数:(它衡量的是一个形状的伸长程度)
- filterByInertia:是否按斑点惯性比过滤斑点。
- minInertiaRatio:用于过滤的最小惯性比值(范围从0到1)。
其他参数:
- minRepeatability:斑点检测的最小重复次数(用于去除噪声)。
- minDistBetweenBlobs:斑点之间的最小距离(用于去除重叠的斑点)。
2、默认 parameters
import cv2
import numpy as np
im = cv2.imread("C://Users/Administrator/Desktop/1.jpg", cv2.IMREAD_GRAYSCALE)
ver = (cv2.__version__).split('.')
print(ver) # ['4', '4', '0']
if int(ver[0]) < 3:
detector = cv2.SimpleBlobDetector()
else:
detector = cv2.SimpleBlobDetector_create()
# 检测blobs
keypoints = detector.detect(im)
# 用红色圆圈画出检测到的blobs
im_with_keypoints = cv2.drawKeypoints(im, keypoints, np.array([]), (0,0,255),
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
# 结果显示
cv2.imshow("Keypoints", im_with_keypoints)
cv2.waitKey(0)
cv2.destroyAllWindows()
输入图像
输出图像
3、配置 parameters
import cv2
import numpy as np
im = cv2.imread("C://Users/Administrator/Desktop/3.jpg", cv2.IMREAD_GRAYSCALE)
# 设置SimpleBlobDetector参数
params = cv2.SimpleBlobDetector_Params()
# 改变阈值
params.minThreshold = 10
params.maxThreshold = 200
# 根据面积过滤
params.filterByArea = True
params.minArea = 1500
# 根据Circularity过滤
params.filterByCircularity = True
params.minCircularity = 0.1
# 根据Convexity过滤
params.filterByConvexity = True
params.minConvexity = 0.87
# 根据Inertia过滤
params.filterByInertia = True
params.minInertiaRatio = 0.01
# 创建一个带有参数的检测器
ver = (cv2.__version__).split('.')
if int(ver[0]) < 3:
detector = cv2.SimpleBlobDetector(params)
else:
detector = cv2.SimpleBlobDetector_create(params)
# 检测blobs
keypoints = detector.detect(im)
# 用红色圆圈画出检测到的blobs
im_with_keypoints = cv2.drawKeypoints(im, keypoints, np.array([]), (0, 0, 255),
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
# 结果显示
cv2.imshow("Keypoints", im_with_keypoints)
cv2.waitKey(0)
输入图片
输出图片
附录——cv2.drawKeypoints
函数定义
- cv2.drawKeypoints(image, keypoints, outImage[, color[, flags]])
参数
-
image:原始图片,数据类型应为 8-bit 单通道或三通道图像。
-
keypoints:关键点列表,通常是由特征点检测算法(如 SIFT、SURF、ORB 等)生成。
-
outImage:输出图像,绘制关键点后的图像将保存在这个变量中。可以设置为原始图像,以在原始图像上直接绘制关键点。
-
color:颜色设置,用于绘制关键点的颜色。它是一个包含三个整数值的元组,分别代表蓝色、绿色和红色的强度,取值范围在 0-255 之间。例如,(255, 0, 0) 表示红色。
-
flags:绘图功能的标识设置,用于控制关键点的绘制方式。它是一个可选参数,可以设置为以下值之一或它们的组合(通过按位或运算 |):
- cv2.DRAW_MATCHES_FLAGS_DEFAULT:创建输出图像矩阵,使用现存的输出图像绘制匹配对和特征点,对每一个关键点只绘制中间点。
- cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG:不创建输出图像矩阵,而是在输出图像上绘制匹配对。
- cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS:对每一个特征点绘制带大小和方向的关键点图形。
- cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS:单点的特征点不被绘制。
-
返回值
该函数没有直接的返回值,但会将绘制了关键点的图像保存在 outImage 参数中。