在 C++ 中将 bmp 转换为 LINEAR jpeg

Posted

技术标签:

【中文标题】在 C++ 中将 bmp 转换为 LINEAR jpeg【英文标题】:Convert bmp to LINEAR jpeg in C++ 【发布时间】:2016-08-31 09:55:51 【问题描述】:

我有一个 image.bmp,我想把它转换成 img.jpg。但我希望能够更改 jpg 图像的参数,例如伽玛校正。我如何在 C++ 中做到这一点,也许使用 opencv 或 imagemagick ?

我已经尝试过使用 CImage 类,但是当我将图像从 bmp 转换为 jpg 时,它太小(从 80MB 到 2MB)并且我丢失了很多信息。所以这就是我希望能够控制参数的原因。

谢谢

【问题讨论】:

查看 Eric 的出色答案,代码为***.com/a/39233320/2836621 @MarkSetchell 所以我应该在 bmp 图像上应用 gamma 函数然后将其写为 jpg 吗? 我想是的 - 我不知道你的形象是什么样的,也不知道你想要达到什么目的,也不知道为什么你认为 CImg 不起作用...... CImage 正在工作,只是我无法控制质量、伽马校正等参数。我没有足够的内存,所以我想将它们转换为 JPG,但我也不想丢失很多信息 @dasada 你应该转换image,然后将其保存为JPG。检查下面的代码。 【参考方案1】:

ImageMagick 具有称为 Magick++ 的 C++ API。使用Magick::Image 类进行图片处理,例如伽马校正可以通过image.gamma(1.0); 方法完成。方法image.magick( "JPEG" ) 将输出格式设置为JPEG。有关更多详细信息,请参阅Image++ 示例。

int main(int argc,char **argv) 
 
  InitializeMagick(*argv);

  Image image( "picture.bmp" );

  // Do your transformation on 'image' here      

  image.magick( "JPEG" ) 
  image.write( "converted.jpg" );

  return 0; 

【讨论】:

以上是关于在 C++ 中将 bmp 转换为 LINEAR jpeg的主要内容,如果未能解决你的问题,请参考以下文章

在 C/C++ 中将 64 位 bmp 文件转换为数组

在java中将bmp转换为jpg

在 C / C++ 中将 int* 转换为 int(*)[n]

在 ASP.net 中将 BMP 转换为 PDF 的最简单方法是啥

在 C/C++ 中将 1 位 bmp 文件转换为数组 [关闭]

在C#中将int数组转换为BMP