使用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到lab但如果我使用手动在线颜色转换器,输入(RGB)在转换为LAB和inputI时看起来不一样从我所期待的东西开始,作为源图像/帧的平均值
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)
答案 0 :(得分:2)
因此,OpenCV对不同颜色空间的值范围有自己的约定,而这又取决于您使用的图像类型。例如,CV_64具有与CV_32和CV_16不同的转换方程,依此类推。
举个例子:(从技术上讲,如果你在文档上做了一些功课,你可以从here了解它)
如果[R,G,B] = [220,233,119]并且你转到this website并转换它
Lab值为
[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]
注意 - 重要的是在使用约定时检查图像的类型。
或者,如果您有动机,为什么不创建具有相同值的所有通道的图像,请使用 Imgproc.cvtcolor
将它们转换为您想要的任何颜色空间然后拿出公式?这就是我做到的。当我更改图像类型时,文档解决了这种混乱。
希望它有所帮助!