python 提取出图片特定区域的平均rgb值

首先原图如下:需要提取出十字架顶端的四个圆区域带颜色的平均rgb值,如果是白色的就不参与计算
在这里插入图片描述

import cv2
import numpy as np
import imagesize
from PIL import Image
import matplotlib.pyplot as plt

def mean_rgb(path,left, upper, right, lower):
    """
        所截区域图片保存
    :param path: 图片路径
    :param left: 区块左上角位置的像素点离图片左边界的距离
    :param upper:区块左上角位置的像素点离图片上边界的距离
    :param right:区块右下角位置的像素点离图片左边界的距离
    :param lower:区块右下角位置的像素点离图片上边界的距离
     故需满足:lower > upper、right > left
    """
    img = Image.open(path)  # 打开图像
    box = (left, upper, right, lower) #需要裁剪的图片区域
    roi = img.crop(box)
    rgb_im = roi.convert('RGB')

    # #展示裁剪后的图片区域
    # plt.imshow(roi)
    # plt.axis('off')
    # plt.show()
    
    #计算裁剪后的图片区域的平均rgb值
    s1=[]
    s2=[]
    s3=[]
    (w,h)=rgb_im.size

    for i in range(w):  #
        for j in range(h):
            r, g, b = rgb_im.getpixel((i, j)) #读取每一点的RGB值
            #黑色rgb(0,0,0),s1\s2\s3中均不包含黑色区域的rgb值
            if r>0:
                s1.append(r)
            if g>0:
                s2.append(g)
            if b>0:
                s3.append(b)
    #计算平均r值
    if len(s1)==0 :
        r_mean=0
    else:
        r_mean=np.mean(s1)
    #计算平均g值
    if len(s2)==0:
        g_mean=0
    else:
        g_mean=np.mean(s2)
    #计算平均b值
    if len(s3)==0:
        b_mean=0
    else:
        b_mean=np.mean(s3)
    print(r_mean,g_mean,b_mean) #输出rgb平均值   


src = cv2.imread(r"2.jpg")#这里原图像路径,cv2.imread()接口读图像,读进来直接是BGR 格式数据格式在 0~255
# cv2.namedWindow("input", cv2.WINDOW_AUTOSIZE)
# cv2.imshow("input", src)
"""
提取图中的圆
"""
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)#BGR转HSV
low_hsv = np.array([10,40,46])#这里要根据HSV表对应,填入三个min值
high_hsv = np.array([165,255,255])#这里填入三个max值
mask = cv2.inRange(hsv,lowerb=low_hsv,upperb=high_hsv)#提取掩膜

mask_img = cv2.add(src, np.zeros(np.shape(src), dtype=np.uint8), mask=mask)
#这个是把掩模图和原图进行叠加,获得原图上掩模图位置的区域
mask_img=cv2.cvtColor(mask_img,cv2.COLOR_BGR2BGRA)


# cv2.imshow("image",mask_img)
cv2.imwrite('result1.png',mask_img)
# cv2.waitKey(0)
# cv2.destroyAllWindows()


#分别求四个圆区域的平均rgb值
Dir='result1.png'
w,h=imagesize.get(Dir) #w为图片宽度,h为图片高度
print("最左侧圆区域的rgb平均值")
mean_rgb(Dir,0,0,round(w/3),h)
print("最右侧圆区域的rgb平均值")
mean_rgb(Dir,round(2*w/3),0,w,h)
print("最上面圆区域的rgb平均值")
mean_rgb(Dir,0,0,w,round(h/3))
print("最下面圆区域的rgb平均值")
mean_rgb(Dir,0,round(2*h/3),w,h)

输出结果如下:
在这里插入图片描述

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值