使用opencv 2(3.1.0)和python 2.7如果将图像或视频帧传递给cv2.mean()
,则会获得
(57.679779052734375, 70.36699761284721, 102.41968960232204, 0.0)
返回的值是否遵循BGR的OPENCV公约(不是rgb),最后一个值是什么意思?
如果我想将返回的值转换为l a b颜色模型在不重新计算平均值的情况下,最好的方法是什么?
我已经尝试使用colormath模块从RGB转换为XYZ到实验室,但是如果我使用手动在线颜色转换器,输入(RGB)将在转换为实验室时看起来不像相同的颜色,而Inputi则以ISN'开头't我期望的是源图像/帧的平均值
from colormath.color_objects import XYZColor, sRGBColor,LabColor
from colormath.color_conversions import convert_color
#RGB-Blue RGB-Green RGB-Red
#57.6797790527 70.3669976128 102.4196896023
#BGR
#107 127 133
rgb = sRGBColor(133, 127, 107)
xyz = convert_color(rgb, XYZColor, target_illuminant='d50')
lab = convert_color(xyz,LabColor)
因此,OpenCV具有不同颜色空间的值范围的约定,这反过来取决于您使用的图像类型。例如,CV_64的转换方程与CV_32和CV_16等不同。
示例:(从技术上讲,如果您对文档进行了一些作业,则可以从此处理解)
如果[r,g,b] = [220,233,119],然后转到此网站并将其转换
实验值将为
[l,a,b] = [89.31,-20.33,53.44]
现在,在OpenCV中,对于类型CV_32FC3,实验室转换如下:
[R, G, B][220, 233, 119] = CV[L, a, b][2.55 * 89.31, 128 + (-20.33), 128 + 53.44]
NOTE - 使用约定时检查图像的类型很重要。
另外,如果您有动力,为什么不使用具有相同值的所有频道创建图像,请使用 Imgproc.cvtcolor
将它们转换为您想要的任何颜色空间,然后出现使用公式?我就是这样做的。当我更改图像类型时,用文档解决了困惑。
希望它有帮助!