我正在尝试使用C++中的openCV加载CIE Lab *图像。
在线上,我只能找到加载RGB图像并将其转换为LAB图像的示例,但是我已经有了LAB图像,因此如何加载它,而不是访问L,a和b的值?

我发现的唯一方法是将LAB图像(考虑为RGB图像)加载并使用以下方式将其转换为Lab图像:

cvtColor(source, destination, CV_BGR2Lab);

但是我认为这不是解决问题的好方法,因为如果执行此操作,则转换后的图像看起来与原始图像会有很大不同。

带有测试图像和以下代码:
    originalImage = imread(originalImagePath, CV_LOAD_IMAGE_UNCHANGED);
    cout << originalImage.type() << endl;
    Mat originalImageSplitted[3];
    split(originalImage, originalImageSplitted);
    cout << originalImageSplitted[0] << endl;
    cout << originalImageSplitted[1] << endl;
    cout << originalImageSplitted[2] << endl;

我得到结果:
0
[]
[]
[]

最佳答案

并不是真正的答案,但是太多的评论。

您可以使用Linux,macOS或Windows终端中的 ImageMagick 来制作Lab colourspace TIF文件,以进行如下测试:

convert -depth 8 xc:black xc:white xc:red xc:lime xc:blue +append -colorspace Lab result.tif

如果我按比例放大它会看起来像这样,因为它目前只有5像素宽和1像素高:

c&#43;&#43; - OpenCV加载CIE L * a * b *图像-LMLPHP

然后,您可以转储像素以查看其值,并希望找出 OpenCV 在做什么:
convert result.tif txt:

示例输出
# ImageMagick pixel enumeration: 5,1,65535,cielab
0,0: (0,-0.5,-0.5)  #000000  cielab(0%,-0.000762951%,-0.000762951%)          <--- black pixel
1,0: (65535,-0.5,-0.5)  #FF0000  cielab(100%,-0.000762951%,-0.000762951%)    <--- white pixel
2,0: (34952,20559.5,17218.5)  #885043  cielab(53.3333%,31.3718%,26.2737%)    <--- red pixel
3,0: (57568,-22102.5,21330.5)  #E00053  cielab(87.8431%,-33.7263%,32.5483%)  <--- green pixel
4,0: (21074,20302.5,-27756.5)  #524F00  cielab(32.1569%,30.9796%,-42.3537%)  <--- blue pixel

查看红色像素,您会得到:
  • L = 53.33%
  • a = 256中的31.37%,即80.3
  • b = 256的26.27%,即67.2
  • 关于c++ - OpenCV加载CIE L * a * b *图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52821900/

    10-17 02:48