CImg:无法识别jpg格式

4
#include <iostream>
#include <stdlib.h>
#include "CImg.h"

using namespace cimg_library;
using namespace std;

int main(){
CImg<unsigned char> image("lena.jpg"), visu(500,400,1,3,0);

const unsigned char red[] = { 255,0,0 }, green[] = { 0,255,0 }, blue[] = { 0,0,255 };



return 0;}

当我编译这段代码时,出现错误:CImg :: load():无法识别文件“lena.jpg”的格式。有什么建议吗?
我已经安装了imageMagick,但错误仍然存在。
3个回答

7
为了启用CImg中的本机JPG文件支持,请在包含CImg.h之前添加以下内容:
#define cimg_use_jpeg
#include "CImg.h"
....

并链接您的代码与libjpeg库。对我来说,它运行得非常顺畅。 如果您不使用它,CImg将尝试对ImageMagick的convert工具进行外部调用以加载文件,这不是最干净的解决方案。在CImg中使用libjpeg绝对更好。 其他图像格式(tiff、png等)同样适用。


我该如何在我的项目中链接libjpeg?我从这里下载了它:http://www.ijg.org/但它是一组头文件、代码和其他文件。 - PSlayer
这取决于你使用的编译器、系统等等。在这里讨论"将库链接到C++项目"可能超出了范围,但是你可以轻松地在某处找到答案(例如在这里:http://www.linuxquestions.org/questions/programming-9/linking-libjpeg-461331/)。 - bvalabas
嗯,这就解释了为什么jpeg已经可以正常工作了。但是就编译而言,指向一个名为“linuxquestions”的网站似乎没有什么帮助。@PSlayer,你是否弄清楚如何将libjpeg链接到Visual Studio的工具中了? - Michael

1
你尝试过使用除了"lena.jpg"之外的其他图像文件吗? "lena.jpg"与当前程序在同一个目录中吗? 你使用什么编译器?
这个示例是否有效(如果有效的话,这并没有太多意义)?
#include "CImg.h"
using namespace cimg_library;
int main() {
  CImg<unsigned char> image("lena.jpg"), visu(500,400,1,3,0);
  const unsigned char red[] = { 255,0,0 }, green[] = { 0,255,0 }, blue[] = { 0,0,255 };
  image.blur(2.5);
  CImgDisplay main_disp(image,"Click a point"), draw_disp(visu,"Intensity profile");
  while (!main_disp.is_closed() && !draw_disp.is_closed()) {
    main_disp.wait();
    if (main_disp.button() && main_disp.mouse_y()>=0) {
      const int y = main_disp.mouse_y();
      visu.fill(0).draw_graph(image.get_crop(0,y,0,0,image.width()-1,y,0,0),red,1,1,0,255,0);
      visu.draw_graph(image.get_crop(0,y,0,1,image.width()-1,y,0,1),green,1,1,0,255,0);
      visu.draw_graph(image.get_crop(0,y,0,2,image.width()-1,y,0,2),blue,1,1,0,255,0).display(draw_disp);
      }
    }
  return 0;
}

来源: http://cimg.eu/reference/group__cimg__tutorial.html

我注意到文档中说只有在安装了imageMagick的情况下才支持jpg格式,也许您在安装时出现了问题并且没有正确安装?

编辑:

这样做可行吗?

#include "CImg.h"
using namespace cimg_library;
int main() {
  CImg<unsigned char> img(640,400,1,3);  // Define a 640x400 color image with 8 bits per color component.
  img.fill(0);                           // Set pixel values to 0 (color : black)
  unsigned char purple[] = { 255,0,255 };        // Define a purple color
  img.draw_text(100,100,"Hello World",purple); // Draw a purple "Hello world" at coordinates (100,100).
  img.display("My first CImg code");             // Display the image in a display window.
  return 0;
}

我正在跟着这个教程,但是它不起作用。他们说我需要安装ImageMagick,但是然后呢?我在使用Windows!我不知道该如何将这个包链接到我的项目中。 - PSlayer
也许可以检查一下你是否完成了这里列出的任务:http://cimg.eu/reference/group__cimg__visual2005.html?(它是针对VS2005的,所以有点过时)。 - Futuza

-1

对我有效的方法是使用文件的绝对路径,而不仅仅是文件名:

例如,将这个: CImg image("lena.jpg"), visu(500,400,1,3,0);

改为这个: CImg image("C:\Users\youruser\Desktop\lena.jpg"), visu(500,400,1,3,0);

当然,这个路径会因为你的文件所在位置而有所不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接