【问题标题】:OpenCV maximum and minimum RGB value using maskOpenCV使用掩码的最大和最小RGB值
【发布时间】:2017-08-27 12:09:08
【问题描述】:

我需要得到一个圆的最小 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] 对这里没有影响。

这是原图。

这是蒙面的圆圈。

【问题讨论】:

    标签: python opencv numpy


    【解决方案1】:

    您可以尝试仅使用numpy 方法来获取所有必需计算的结果,而不是对某些使用OpenCV,对另一些使用numpy,并且在某些情况下,numpy 在执行方面可以胜过OpenCV时间。您可以使用 numpys 的 minmaxmean 作为:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 2013-09-13
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多