通过cv2.COLOR_BGR2HSV获取的图片,有什么方法可以快速获得这图片基本颜色各自的占比,有的话求举例
时间: 2024-02-24 18:00:21 浏览: 69
可以使用Python中的numpy和cv2库来快速获得图片基本颜色各自的占比。具体实现步骤如下:
1. 将原始图片转换为HSV色彩空间的图片。
```
import cv2
import numpy as np
img = cv2.imread('image.jpg')
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
```
2. 根据HSV色彩空间,设置各个颜色范围。
```
lower_red = np.array([0, 50, 50])
upper_red = np.array([10, 255, 255])
lower_yellow = np.array([26, 43, 46])
upper_yellow = np.array([34, 255, 255])
lower_green = np.array([35, 43, 46])
upper_green = np.array([77, 255, 255])
lower_blue = np.array([100, 43, 46])
upper_blue = np.array([124, 255, 255])
lower_purple = np.array([125, 43, 46])
upper_purple = np.array([155, 255, 255])
lower_pink = np.array([156, 43, 46])
upper_pink = np.array([180, 255, 255])
```
3. 使用cv2.inRange函数分别提取各个颜色范围内的颜色。
```
mask_red = cv2.inRange(hsv_img, lower_red, upper_red)
mask_yellow = cv2.inRange(hsv_img, lower_yellow, upper_yellow)
mask_green = cv2.inRange(hsv_img, lower_green, upper_green)
mask_blue = cv2.inRange(hsv_img, lower_blue, upper_blue)
mask_purple = cv2.inRange(hsv_img, lower_purple, upper_purple)
mask_pink = cv2.inRange(hsv_img, lower_pink, upper_pink)
```
4. 分别计算各个颜色所占的比例。
```
total_pixels = hsv_img.shape[0] * hsv_img.shape[1]
red_pixels = cv2.countNonZero(mask_red)
yellow_pixels = cv2.countNonZero(mask_yellow)
green_pixels = cv2.countNonZero(mask_green)
blue_pixels = cv2.countNonZero(mask_blue)
purple_pixels = cv2.countNonZero(mask_purple)
pink_pixels = cv2.countNonZero(mask_pink)
red_ratio = red_pixels / total_pixels
yellow_ratio = yellow_pixels / total_pixels
green_ratio = green_pixels / total_pixels
blue_ratio = blue_pixels / total_pixels
purple_ratio = purple_pixels / total_pixels
pink_ratio = pink_pixels / total_pixels
```
这样就可以得到这张图片基本颜色各自的占比了。需要注意的是,这种方法是基于固定的颜色范围来计算的,如果图片中的颜色不在预设的范围内,则无法正确计算。同时,由于图片中的颜色分布可能会非常复杂,所以这种方法只是一个粗略的估计。
阅读全文