我正在嘗試使用OpenCV進行一些白色blob檢測。但是我的腳本未能檢測到大白塊,這是我的目標,同時檢測到一些小斑點。我是OpenCV的新手,在OpenCV中使用simpleblobdetection時我做錯了什麼? [解決了部分,請閱讀下文]使用OpenCV進行Blob檢測
這裏是腳本:
#!/usr/bin/python
# Standard imports
import cv2
import numpy as np;
from matplotlib import pyplot as plt
# Read image
im = cv2.imread('whiteborder.jpg', cv2.IMREAD_GRAYSCALE)
imfiltered = cv2.inRange(im,255,255)
#OPENING
kernel = np.ones((5,5))
opening = cv2.morphologyEx(imfiltered,cv2.MORPH_OPEN,kernel)
#write out the filtered image
cv2.imwrite('colorfiltered.jpg',opening)
# Setup SimpleBlobDetector parameters.
params = cv2.SimpleBlobDetector_Params()
params.blobColor= 255
params.filterByColor = True
# Create a detector with the parameters
ver = (cv2.__version__).split('.')
if int(ver[0]) < 3 :
detector = cv2.SimpleBlobDetector(params)
else :
detector = cv2.SimpleBlobDetector_create(params)
# Detect blobs.
keypoints = detector.detect(opening)
# Draw detected blobs as green circles.
# cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS ensures
# the size of the circle corresponds to the size of blob
print str(keypoints)
im_with_keypoints = cv2.drawKeypoints(opening, keypoints, np.array([]), (0,255,0), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
# Show blobs
##cv2.imshow("Keypoints", im_with_keypoints)
cv2.imwrite('Keypoints.jpg',im_with_keypoints)
cv2.waitKey(0)
編輯:
通過增加面積最大值的更大的價值,我能夠識別大blob但我的最終目標是確定存在或不存在的大白色矩形。我所做的白色斑點檢測不僅返回了矩形,還返回了周圍區域。 [這部分解決]
編輯2:
基於從@PSchn答案,我更新我的代碼應用邏輯,首先將彩色濾光片只得到了白色像素,然後取出噪聲點使用開放。它適用於樣本數據,我可以在BLOB檢測後成功獲得關鍵點。
真棒解釋。這是我正在尋找的。感謝! –
不客氣。但我不知道它是否適用於所有圖像。希望它;) – PSchn
你介意分享代碼如何做平滑和其他步驟?另外調整參數以獲得此類任務的最佳過濾器的最佳方法是什麼?再次感謝! –