我们可以获取一个图片每个通道的均值来得到整个图片的主色调
使用到的图片
代码如下
import cv2 as cv
def mean_image(img1, img2):
m1 = cv.mean(img1)
m2 = cv.mean(img2)
print(m1)
print(m2)
src1 = cv.imread("image/Pixel/Pixel_Operation_Star.png")
src2 = cv.imread("image/bayer.png")
mean_image(src1,src2)
"""0是一致等待"""
cv.waitKey(0)
得到了两个图片的均值
(26.398724830767904, 26.398724830767904, 26.398724830767904, 0.0)
(106.83018044237485, 111.15746848905562, 112.97378339728942, 0.0)
从三通道的数字上分析,第一个图片每个通道的均值都一样,说明是一张黑白图片
而3个通道的均值都很低,说明这张图片主色调是黑色
第二张图片三通道比较平均,而GBR通道的绿色和红色稍高,表明整体画面偏暖色调,因为绿红叠加=黄
进一步,我们可以通过图像的方差(教程说是方差,其实是错误的)来查看整体像素的偏差度
import cv2 as cv
def meanStdDev_image(img1, img2):
m1, dev1 = cv.meanStdDev(img1)
m2, dev2 = cv.meanStdDev(img2)
print(m1)
print(m2)
src1 = cv.imread("image/Pixel/Pixel_Operation_Star.png")
src2 = cv.imread("image/bayer.png")
mean_image(src1, src2)
"""0是一致等待"""
cv.waitKey(0)
我看的教程上说meanStdDevfan返回的是方差,但是我查看函数说明的时候人家里面写的是标准差
def meanStdDev(src, mean=None, stddev=None, mask=None): # real signature unknown; restored from __doc__
"""
meanStdDev(src[, mean[, stddev[, mask]]]) -> mean, stddev
. Calculates a mean and standard deviation of array elements.
既然有疑惑那我们就来验证下
为了验证,我准备了一张一半黑一半白的图片
因为我是手工分割的,不会正好是一半,不过接近就行了
下面我们来看下代码
import cv2 as cv
def meanStdDev_image(img3):
m3, dev3 = cv.meanStdDev(img3)
cv.imshow("im", img3)
print(m3, dev3)
src3 = cv.imread("image/Pixel/Pixel_Operation_Mean.png")
meanStdDev_image(src3)
"""0是一致等待"""
cv.waitKey(0)
得到的实际结果:
[127.34755103]
[127.34755103]
[127.34755103]
三通道都是127 也就是 标准差
所以结论就是meanStdDev函数的注释是对的,这玩意儿得到的是标准差,根本不是方差
现在做教程的人也是越来越不严谨了,软件行业真是世风日下
继续看下先前两个图片的标准差
[77.68386035]
[77.68386035]
[77.68386035]
[64.37683975]
[69.78804824]
[73.04103423]
标准差越大说明明暗像素之间的差异比较大
标准差小说明图片明暗差异较小
so,这是不是就表明一张逆光拍摄的人物照标准差会比较大
HDR这玩意儿是不是就是根据这个数值来判断的呢?
目前还不知道是不是可行~