将cv2.mean()的输出转换为其他颜色模型(LAB)

时间:2017-03-01 13:50:41

标签: python opencv mean

使用OpenCV 2(3.1.0)和python 2.7如果将图像或视频帧传递给cv2.mean(),则会得到类似

的输出
(57.679779052734375, 70.36699761284721, 102.41968960232204, 0.0)
  1. 返回的值是否遵循BGR的OpenCV约定(不是 RGB)以及最后一个值是什么意思?

  2. 如果我希望将返回的值翻译为L A B颜色模型 如果不重新计算平均值,最好的方法是什么?

  3. 我尝试使用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)
    

1 个答案:

答案 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 将它们转换为您想要的任何颜色空间然后拿出公式?这就是我做到的。当我更改图像类型时,文档解决了这种混乱。

希望它有所帮助!