简体   繁体   English

通过 OpenCV 在原始图像上标记 Blob 检测

[英]Tagging Blob detection on original image via OpenCV

I want to tag on the original image with the blobs that are found.我想用找到的 blob 标记原始图像。 But whenever I do the blob detection it only will make a new image like this:但是每当我进行斑点检测时,它只会制作一个像这样的新图像:

Outcome image after blob: blob 后的结果图像:

在此处输入图像描述

However, I want to show the original image with the red tagging on it.但是,我想显示带有红色标记的原始图像。 Original image:原图:

在此处输入图像描述

I just use the regular code for the blob detection.我只是使用常规代码进行斑点检测。 Is there another way to do the red circles on the original image?还有另一种方法可以在原始图像上做红色圆圈吗? So its clear where they are.所以很清楚他们在哪里。

im_gray = cv2.imread(img,cv2.IMREAD_GRAYSCALE)
(thresh, im_bw) = cv2.threshold(im_gray, 128, 255,cv2.THRESH_BINARY | 
cv2.THRESH_OTSU)

thresh = 50
im_bw = cv2.threshold(im_gray, thresh, 255, cv2.THRESH_BINARY)[1]

#detect blobs based on features
params = cv2.SimpleBlobDetector_Params()

# Filter by Area.
params.filterByArea = True
params.minArea = 70
params.maxArea = 150

# Filter by Color (black=0)
params.filterByColor = False  # Set true for cast_iron as we'll be detecting black regions
params.blobColor = 0

# Filter by Circularity
params.filterByCircularity = True
params.minCircularity = 0.5
params.maxCircularity = 1

# Filter by Convexity
params.filterByConvexity = True
params.minConvexity = 0.5
params.maxConvexity = 1

# Filter by InertiaRatio
params.filterByInertia = True
params.minInertiaRatio = 0.3
params.maxInertiaRatio = 0.9

# Distance Between Blobs
params.minDistBetweenBlobs = 0



#thresholded to value 70 detecting blobs:


detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(im_bw)
print("Number of blobs detected are : ", len(keypoints))
#detect blobs: missing the detection based on features
im_with_keypoints = cv2.drawKeypoints(im_bw, keypoints, numpy.array([]), (0, 0, 255),
                                      cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

Your problem is your last line:你的问题是你的最后一行:

im_with_keypoints = cv2.drawKeypoints(im_bw, keypoints, numpy.array([]), (0, 0, 255),
                                      cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

Here you draw your key points on im_bw , which is not your original image but your thresholded image.在这里,您在im_bw上绘制关键点,这不是您的原始图像,而是您的阈值图像。 If you replace im_bw here with your original image (eg use your grayscale version you already loaded as im_gray ) you should get your desired result.如果您在此处将im_bw替换为您的原始图像(例如,使用您已经加载为im_gray的灰度版本),您应该会得到您想要的结果。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM