用python写一个计算图片中各颜色占比的程序
时间: 2023-06-03 13:03:51 浏览: 116
C#图片颜色比例分布
4星 · 用户满意度95%
Sure, 我能够帮您解决这个问题。您可以使用Python的OpenCV库和numpy库。步骤如下:
1. 导入OpenCV和numpy库
```python
import cv2
import numpy as np
```
2. 读取图像并将其转换为RGB格式
```python
image = cv2.imread('image.jpg')
RGB_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
```
3. 将RGB图像转换为HSV格式
```python
HSV_image = cv2.cvtColor(RGB_image, cv2.COLOR_RGB2HSV)
```
4. 为每个颜色定义上下限
```python
lower_red = np.array([0,50,50])
upper_red = np.array([10,255,255])
lower_yellow = np.array([26,50,50])
upper_yellow = np.array([36,255,255])
lower_green = np.array([36,50,50])
upper_green = np.array([70,255,255])
lower_blue = np.array([100,50,50])
upper_blue = np.array([130,255,255])
lower_purple = np.array([125,50,50])
upper_purple = np.array([155,255,255])
lower_pink = np.array([160,50,50])
upper_pink = np.array([180,255,255])
```
5. 将每个颜色的区域提取出来并计算比例
```python
mask_red = cv2.inRange(HSV_image, lower_red, upper_red)
mask_yellow = cv2.inRange(HSV_image, lower_yellow, upper_yellow)
mask_green = cv2.inRange(HSV_image, lower_green, upper_green)
mask_blue = cv2.inRange(HSV_image, lower_blue, upper_blue)
mask_purple = cv2.inRange(HSV_image, lower_purple, upper_purple)
mask_pink = cv2.inRange(HSV_image, lower_pink, upper_pink)
total_pixels = mask_red.size + mask_yellow.size + mask_green.size + mask_blue.size + mask_purple.size + mask_pink.size
red_percentage = (np.sum(mask_red) / total_pixels)*100
yellow_percentage = (np.sum(mask_yellow) / total_pixels)*100
green_percentage = (np.sum(mask_green) / total_pixels)*100
blue_percentage = (np.sum(mask_blue) / total_pixels)*100
purple_percentage = (np.sum(mask_purple) / total_pixels)*100
pink_percentage = (np.sum(mask_pink) / total_pixels)*100
print("Red:", red_percentage,"%")
print("Yellow:", yellow_percentage,"%")
print("Green:", green_percentage,"%")
print("Blue:", blue_percentage,"%")
print("Purple:", purple_percentage,"%")
print("Pink:", pink_percentage,"%")
```
请注意,此示例代码只考虑了六种颜色,您可以根据您的需求添加或删除颜色。
希望这可以帮助您解决问题!
阅读全文