2017-04-02 25 views
2

円の最小RGB値を取得する必要があります。マスクを適用する平均RGB値メソッド(cv2.mean)のようにするにはどうすればよいですか?私がやっているサークルの平均RGB値を取得するには:マスクを使用したOpenCVの最大値と最小値

color_imgは、元の画像をある
circle_img = np.zeros((circle_img.shape[0],circle_img.shape[1]), np.uint8) 
cv2.circle(circle_img,(x_center,y_center),radio,(255,255,255),-1) 
datos_rgb = cv2.mean(color_img, mask=circle_img) 

は私がやっている最小RGB値を取得するには:

masked_dataは、第二の画像(マスクされた丸)である
masked_data = cv2.bitwise_and(color_img, color_img, mask=circle_img) 
rgb_min = masked_data.reshape((masked_data.shape[0]*masked_data.shape[1], 3)).min(axis=0) 

しかし私はバックグラウンドのために値[0,0,0]を得ています...私は黒の背景を無視するためにマスクを適用する平均(cv2.mean)のようにする必要があります。

masked_data = cv2.bitwise_and(color_img, color_img, mask=circle_img) 
rgb_max = masked_data.reshape((masked_data.shape[0]*masked_data.shape[1], 3)).max(axis=0) 

ので:値を取得することはできませんので、何も純粋な黒は、[0,0,0]

は、それが完璧にやって作品の最大のRGB値を取得するには、元の画像ではありません黒色[0,0,0]ここでは影響しません。

これは元の画像です。

Masked circle

これは、マスクされたサークルです。あなたはむしろ、他の人のために、いくつかのためのOpenCVnumpyを使用するよりも、すべての必要な計算の結果を得るためにのみnumpyメソッドを使用してみて、いくつかのケースでnumpyのは、実行時間の面でOpenCVのを、実行することができ Original image

答えて

1

。数字はmin,maxmeanとなります。

import cv2 
import numpy as np 

img = cv2.imread("./assets/11yeJ.jpg") 
mask = np.zeros((img.shape[0],img.shape[1]), np.uint8) 
cv2.circle(mask, (493, 338), 30, (255, 255, 255), -1) 

# Get the indices of mask where value == 255, which may be later used to slice the array. 
img_mask = img[np.where(mask == 255)] 

img_avg = np.mean(img_mask, axis=0) 
img_min = np.min(img_mask, axis=0) 
img_max = np.max(img_mask, axis=0) 
関連する問題