如何解决为什么OpenCV SimpleBlobDetector无法检测到所有斑点?
我尝试更改所有内容,但似乎没有任何效果。即使不适用于第二张图片,我也希望它适用于第一张图片。关于它为什么不起作用的任何想法?
代码
import numpy as np
import cv2
binary = binary_images[0]
k_max_area=0.07; k_min_area=0.003
min_area = np.shape(img)[0]*np.shape(binary)[1]*k_min_area
max_area = np.shape(img)[0]*np.shape(binary)[1]*k_max_area
params = cv2.SimpleBlobDetector_Params()
params.minThreshold=0
params.maxThreshold=230
params.filterByArea = True
params.minArea=min_area
params.maxArea=max_area
params.filterByCircularity = False
params.filterByInertia = False
params.filterByConvexity = False
params.filterByColor=True
params.blobColor=255
ver = (cv2.__version__).split('.')
if int(ver[0]) < 3 :
detector = cv2.SimpleBlobDetector(params)
else :
detector = cv2.SimpleBlobDetector_create(params)
detector.empty()
keypoints = detector.detect(binary)
im_with_keypoints = cv2.drawKeypoints(binary,keypoints,np.array([]),(0,255),cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
plt.imshow(im_with_keypoints)
解决方法
之所以发生,是因为您的Blob已连接。在检测到斑点之前,先进行打开操作(先腐蚀,然后扩张)。
filterDropdown(e) {
console.log("e in filterDropdown -------> ",e);
window.scrollTo(window.scrollX,window.scrollY + 1);
let searchString = e.toLowerCase();
if (!searchString) {
this.filteredList = this.data.slice();
return;
} else {
this.filteredList = this.data.filter(
user => user.name.toLowerCase().indexOf(searchString) > -1
);
}
window.scrollTo(window.scrollX,window.scrollY - 1);
console.log("this.filteredList indropdown -------> ",this.filteredList);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。