2
我有一張有9個水滴的圖片,它們有不同的顏色強度(即它們都是綠色的,但不同的綠色)。我們的目標是:如何使用OpenCV在圓圈中查找最大RGB值?
- 識別9滴
- 查找相關的值(大小,位置,RGB值等)
- 情節數據
我使用SimpleBlobDetector
識別點。這會輸出keypoints
,其中包含有關每個blob的相關信息。
但是,我不知道如何訪問特定blob的RGB(或HSV)值。如何只搜索blob中的像素以確定最小/最大/平均顏色值?
任何意見非常感謝!
這是我的完整代碼。它只是打印每個blob的x_position
,y_position
和area
。我還附我使用的文件:
# Standard imports
import cv2
import numpy as np
from matplotlib import pyplot as plt
# Read image
filename= "C:\Users\Kevin\Pictures\Far 3.jpg"
img = cv2.imread(filename, 0)
img_color = cv2.imread(filename, cv2.IMREAD_ANYCOLOR)
img_c = cv2.resize(img_color,(800,600))
img1 = cv2.resize(img,(800,600))
ret,im = cv2.threshold(img1,120,255,cv2.THRESH_BINARY)
#######################################################
#######################################################
# Setup SimpleBlobDetector parameters.
params = cv2.SimpleBlobDetector_Params()
# Change thresholds
params.minThreshold = 50
params.maxThreshold = 150
# Filter by Area.
params.filterByArea = True
params.minArea = 150
params.maxArea = 400
# Filter by Circularity
params.filterByCircularity = True
params.minCircularity = 0.2
# Filter by Convexity
params.filterByConvexity = True
params.minConvexity = 0.1
# Filter by Inertia
params.filterByInertia = True
params.minInertiaRatio = 0.01
detector = cv2.SimpleBlobDetector_create(params)
#######################################################
#######################################################
# Detect blobs.
keypoints = detector.detect(im)
# Draw detected blobs as red circles.
# cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS ensures the size of the circle corresponds to the size of blob
im_with_keypoints = cv2.drawKeypoints(img_c, keypoints, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
# Show keypoints
cv2.imshow("Keypoints", im_with_keypoints)
x=[]
y=[]
area=[]
for i in xrange(9):
xx = keypoints[i].pt[0]
yy = keypoints[i].pt[1]
aarea = keypoints[i].size
print "PT.%f -- " %i, "x = %f," %xx, "y = %f," %yy,"area = %f," %aarea, "\n"
#######################################################
#######################################################
cv2.waitKey(0)
而不是使用SimpleBlobDetector,我會在HSV顏色空間中分割_almost_綠色斑點。那麼你會得到所有斑點的面具。然後,您可以使用'findContours'檢索每個掩碼,併爲每個blob使用帶有掩碼的'minMaxLoc'。 – Miki