【问题标题】:Convert a grayscale JPEG to an RGB JPEG将灰度 JPEG 转换为 RGB JPEG
【发布时间】:2016-10-23 11:51:24
【问题描述】:

我有几张(实际上是几千张)jpg 图像,它们的颜色空间为灰色,但我想使用它们的程序要求它们是 rgb 格式。有什么方法可以将 jpg 从单色转换为 rgb 并且仍然让它看起来一样(即基本上使用 rgb 值来制作灰度图像)。

我在 MATLAB 中将图像作为二维矩阵,我尝试使用 imwrite 将图像强制为 rgb:

imwrite(image, 'rgb.jpg')

我认为这会起作用,因为 imwrite 的文档说 jpg 应该是 rgb,但我仍然得到单色图像。

【问题讨论】:

    标签: image matlab jpeg rgb grayscale


    【解决方案1】:

    当您将 2D 矩阵保存为 JPEG 时,它仍然是灰度的。

    imwrite(rand(100), 'test.jpg');
    
    info = imfinfo('test.jpg');
    
    %          FileSize: 6286
    %            Format: 'jpg'
    %             Width: 100
    %            Height: 100
    %          BitDepth: 8
    %         ColorType: 'grayscale'    <---- Grayscale
    %   NumberOfSamples: 1              <---- Number of Channels
    %      CodingMethod: 'Huffman'
    %     CodingProcess: 'Sequential'
    
    size(imread('test.jpg'))
    %   100   100
    

    如果您希望生成的图像是真彩色(即 RGB),则需要在第三维中重复矩阵 3 次以创建 separate red, green, and blue channels。我们对所有通道重复相同的值,因为任何灰度值都可以用相同权重的红色、绿色和蓝色来表示。您可以使用repmat 完成此操作。

    imwrite(repmat(im, [1 1 3]), 'rgb.jpg')
    
    info = imfinfo('rgb.jpg');
    
    %          FileSize: 6660
    %            Format: 'jpg'
    %             Width: 100
    %            Height: 100
    %          BitDepth: 24
    %         ColorType: 'truecolor'      <---- True Color (RGB)
    %   NumberOfSamples: 3                <---- Number of Channels
    %      CodingMethod: 'Huffman'
    %     CodingProcess: 'Sequential'
    
    
    size(imread('rgb.jpg'))
    %   100   100   3
    

    【讨论】:

    • 谢谢!这正是我需要它做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2023-03-27
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多