将CV2.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颜色模型在不重新计算平均值的情况下,最好的方法是什么?

我已经尝试使用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 将它们转换为您想要的任何颜色空间,然后出现使用公式?我就是这样做的。当我更改图像类型时,用文档解决了困惑。

希望它有帮助!

相关内容

最新更新