我需要获得圆的最小RGB值。我怎样才能像应用蒙版的平均RGB值方法(cv2.mean)那样做?要获得圆圈的平均RGB值,请执行以下操作:
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)
color_img
是原始图片。
要获得我做的最小RGB值:
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)
masked_data
是第二张图片(蒙面圆圈)。
但是我得到的所有时间都是值[0,0,0],因为我认为背景......我需要像平均值(cv2.mean)那样使用遮罩来忽略黑色背景。原始图像中没有纯黑色,因此无法获得值[0,0,0]
要获得最大RGB值,它可以完美地完成:
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]在这里不会影响。
这是原始图片。
答案 0 :(得分:1)
您可以尝试仅使用numpy
方法获取所有必需计算的结果,而不是对某些人使用OpenCV
而对其他人使用numpy
,在某些情况下,numpy可能会超出在执行时间方面执行OpenCV。你可以使用numpys' min
,max
和mean
为:
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)