OpenCVを使用して白いブロブ検出を実行しようとしています。しかし、私のスクリプトは小さな白い塊が検出されている間、私の目標である大きな白いブロックを検出することができませんでした。私はOpenCVを初めて使っています.OpenCVでsimpleblobdetectionを使用すると何か問題がありますか?OpenCVを使用したブロブ検出
を[部分的に解決、下記をお読みください]そして、ここでスクリプトです:
#!/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)
はEDIT:
面積の最大値の大きな値を追加することで、私は大きなを識別することができています私の最終目標は、大きな白い矩形が存在するかどうかを特定することです。そして、私が白いブロブの検出は、矩形だけでなく周囲の領域も返します。最初の白画素のみを取得し、除去するためにカラーフィルタを設定し、@PSchnからの回答に基づいて
、iは論理を適用するために自分のコードを更新:
EDIT 2 [この部分を解決しました]ノイズポイントは開口部を使用します。それはサンプルデータのために動作し、私は正常にblob検出後にキーポイントを得ることができます。
すごい説明。それが私が探しているものです。それを感謝します! –
ようこそ。しかし、それはあなたのすべての画像で動作するかどうかは分かりません。希望する;) – PSchn
スムージングや他のステップのコードを共有することはできますか?また、この種のタスクに最適なフィルタを得るためにパラメータを調整する最善の方法は何ですか?再度、感謝します! –