2016-03-02 137 views
2

我有一張有9個水滴的圖片,它們有不同的顏色強度(即它們都是綠色的,但不同的綠色)。我們的目標是:如何使用OpenCV在圓圈中查找最大RGB值?

  • 識別9滴
  • 查找相關的值(大小,位置,RGB值等)
  • 情節數據

我使用SimpleBlobDetector識別點。這會輸出keypoints,其中包含有關每個blob的相關信息。

但是,我不知道如何訪問特定blob的RGB(或HSV)值。如何只搜索blob中的像素以確定最小/最大/平均顏色值?

任何意見非常感謝!

這是我的完整代碼。它只是打印每個blob的x_positiony_positionarea。我還附我使用的文件:

# 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) 
+1

而不是使用SimpleBlobDetector,我會在HSV顏色空間中分割_almost_綠色斑點。那麼你會得到所有斑點的面具。然後,您可以使用'findContours'檢索每個掩碼,併爲每個blob使用帶有掩碼的'minMaxLoc'。 – Miki

回答

0

對於IMG每個像素,B,G,R的值可以理解爲:

B=img[xx,yy,0] 
G=img[xx,yy,1] 
R=img[xx,yy,2] 

你可以取一個blob中所有像素的平均B,G,R值,然後找出這些blob中的最大值。