今天学习blob的可用于斑点检测,其实这个斑点只是普通的这么叫法,专业点是的Blob是图像中共享某些共同属性(例如灰度值)的一组连接的像素。
如下图是今天检测的试验图
算法过程是: 1:Thresholding(二值化过程):通过对源图像进行阈值化,将源图像转换为若干二值图像,阈值从minThreshold开始。这些阈值通过thresholdStep递增,直到maxThreshold。所以第一个阈值是minThreshold,第二个是minThreshold + thresholdStep,第三个是minThreshold + 2 x thresholdStep,以此类推。
2:Grouping:在每个二值图像中,相互之间的白色像素被组合在一起。我们称这些为二值blobs。
3:Merging:计算二值图像中二值blobs的中心,并合并距离小于minDistBetweenBlobs 的 blobs。
4:Center & Radius Calculation:计算并返回新合并的blobs 的中心和半径。
import cv2
import numpy as np
def cv_show_image(name, img):
cv2.imshow(name, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
img = cv2.imread("images/blob.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
detector = cv2.SimpleBlobDetector_create()
keypoints = detector.detect(gray)
keypoints_array = np.array(keypoints)
print(keypoints_array.shape)
for kp in keypoints:
print("关键点的位置是: pt[0]:{}\tpt[1]:{}\tangle:{}\tsize:{}".format(
kp.pt[0], kp.pt[1], kp.angle, kp.size))
im_with_keypoints = cv2.drawKeypoints(gray, keypoints_array,
np.array([]), (0, 0, 255),
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv_show_image("Keypoints", im_with_keypoints)
使用默认参数情况下的效果: 发现有一些没有检测上,我们试着更改下参数试一试,比如调整二值化的阈值,调宽一些,面积的范围放宽一些,圆度放宽一点。
import cv2
import numpy as np
def cv_show_image(name, img):
cv2.imshow(name, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
im = cv2.imread("images/blob.jpg", cv2.IMREAD_GRAYSCALE)
params = cv2.SimpleBlobDetector_Params()
params.minThreshold = 10
params.maxThreshold = 240
params.filterByColor = True
params.blobColor = 0
params.filterByArea = True
params.minArea = 10
params.maxArea = 1000
params.filterByCircularity = True
params.minCircularity = 0.1
params.filterByConvexity = True
params.minConvexity = 0.14
params.maxConvexity = 1
params.filterByInertia = True
params.minInertiaRatio = 0.01
detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(im)
keypoints_array = np.array(keypoints)
print(keypoints_array.shape)
im_with_keypoints = cv2.drawKeypoints(im, keypoints, np.array([]), (0, 0, 255),
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv_show_image("Keypoints", im_with_keypoints)
调整完参数的效果是: 本文学习自 https://blog.csdn.net/weixin_43229348/article/details/120448954
|