首先原图如下:需要提取出十字架顶端的四个圆区域带颜色的平均rgb值,如果是白色的就不参与计算
文章来源:https://www.toymoban.com/news/detail-502563.html
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)
输出结果如下:
文章来源地址https://www.toymoban.com/news/detail-502563.html
到了这里,关于python 提取出图片特定区域的平均rgb值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!