CImg错误:无法识别文件“ xxx.png”的格式

Xoxo.m.zf

我一直在寻找C ++中的代码,该代码可让我获取png文件中所有像素的RGB值。

因此,我在互联网上进行了大量搜索,找到了执行此操作的不同方式,例如使用libpng,OpenCV,Magick ++,CImg等。我只是决定使用CImg(主要是因为我不知道如何使用OpenCV,尽管我在Code :: Blocks中搜索了很多有关如何安装和使用它的内容,并且它与mingw64有关,而mingw64是我从Sorceforge下载的安装程序,在下载某些文件的过程中一直给我错误,以及有关他们其余的我只是找不到与Code :: Blocks兼容的适当的头文件(如Magick ++。h)...因此,如果您认为其中一些会比CImg.h更好和更简单,那么我d如果您提供给我标题的下载链接或任何其他必要的东西,请多谢您)

所以这是我在Cimg中找到的代码:

#include <windows.h>
#include <iostream>
using namespace std;

#include <CImg.h>
using namespace cimg_library;

int main()
{
CImg<unsigned char>src("twittericon.png");
int width = src.width();
int height = src.height();
cout << width << "x" << height << endl;
for (int r = 0; r < height; r++)
for (int c = 0; c < width; c++)
   cout << "(" << r << "," << c << ") ="
        << " R" << (int)src(c,r,0,0)
        << " G" << (int)src(c,r,0,1)
        << " B" << (int)src(c,r,0,2) << endl;
return 0;
}

但是问题是运行该程序后,它给了我错误:CImg :: load():无法识别文件'twittericon.png'的格式 

该怎么办?

顺便说一句,您是否知道任何更好的方法来读取png文件的这些RGB值?如果这样做,还可以请我提供一些说明吗?谢谢。

马克·谢切尔

获取PNG文件中RGB像素值的方法有很多,最好的方法取决于您的实际使用情况。


选项1

如果您有一个或两个PNG文件,并且只想一次轻松获得RGB像素,那么我建议您安装任何已经提供链接的现成ImageMagick二进制文件。然后,我们可以PNG在“终端”或“命令提示符”中的命令行制作这样的测试文件:

convert xc:red xc:lime xc:blue +append \( xc:cyan xc:magenta xc:yellow +append \) -append image.png

它看起来像这样(略小):

在此处输入图片说明

(我认为您在上述命令中省略了Windows下的反斜杠)

好的,现在您想查看RGB值,因此可以将文件转储为文本:

convert image.png -depth 8 txt:

样本输出

# ImageMagick pixel enumeration: 3,2,65535,srgb
0,0: (65535,0,0)  #FF0000  red
1,0: (0,65535,0)  #00FF00  lime
2,0: (0,0,65535)  #0000FF  blue
0,1: (0,65535,65535)  #00FFFF  cyan
1,1: (65535,0,65535)  #FF00FF  magenta
2,1: (65535,65535,0)  #FFFF00  yellow

或者,您可以将文件转换为ASCII模式下NetPBM的古老(但精湛)NetPBM格式的Wikipedia描述

convert image.png -compress none image.pnm

现在,您将获得一个像这样的文件,您可以轻松阅读:

P3                              # PPM in ASCII mode
3 2                             # width=3 height=2
255                             # 8-bit
255 0 0 0 255 0 0 0 255 
0 255 255 255 0 255 255 255 0 

如果省略,-compress none则将获得相同的文件,但是RGB数据将以8位无符号二进制格式出现,因此整个文件在C / C ++中非常易于读取。实际上,CImg仍然知道如何读取/写入这些内容。

因此,可以将可能要访问的任何图像(TIF,BMP,JPEG,GIF)PPM预先转换为NetBM文件,并仅PPM使用CImg中的内置例程读取和写入文件任务完成!


选项2

在下一级别,您可以ImageMagick网站上的预构建二进制文件安装ImageMagick,然后使用CImg然后,CImg将定位ImageMagick程序,该程序使用该程序来转换它无法代表自己读取的任何内容。这样,您可以立即免费访问ImageMagick知道的大约200多种格式convert/magick


选项3

或者,您可以构建和安装libpng,然后在使用CImg编写代码时,定义一个宏,然后再包含CImg.h它,该宏libpng用于读取和写入PNG文件。

当您只允许ImageMagick完成所有工作时,这将是一个很大的麻烦,最后,您只能获得PNG支持而不是200多种格式的所有工作。

这种情况如下所示:

#define cimg_use_png 1
#include "CImg.h"
...
...

您将使用:

c++ -I CIMG_DIRECTORY -L LIBPNG_DIRECTORY -lpng -lz

我做了另一个答案,使用此选项libjpeg获取CIMg以读取和写入JPEG。我只能说这是完全的痛苦-答案在这里

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

CImg无法识别格式“ jpeg”

SPSSIOError:“变量”的格式指定错误(A'XXX)

格式:pygraphviz Python,Heroku无法识别“ png”

Windows Phone XAP文件签名错误-> SignTool错误:无法识别此文件格式,因为无法识别

如何读取行格式为 [[xxx],[yyy]] 的 .txt 文件,以便直接访问 [xxx] 和 [yyy]?

GDB 错误 - 不是可执行格式:无法识别文件格式

无法加载文件或程序集“ xxx”或其依赖项之一。试图加载格式错误的程序

无法识别文件格式_ *

值xxx对yyy无效。错误的日期时间格式

无法使用include_graphics在Rmarkdown中插入png(错误:文件不是PNG格式)

使用opencv识别png格式图像的质量

从ByteString识别光栅(jpg,png等)或svg文件格式

如何启用libMagick ++以保存.png文件格式

识别格式错误的XML文件

nm:无法识别文件格式

objdump:无法识别文件格式

无法识别makefile文件格式

无法识别文件格式;视为链接描述文件。文本文件错误?

MinGW编译“无法识别文件:无法识别文件格式”

将格式xxxxxxxxxx更改为xxx-xxx-xxxx

无法识别png文件进行图像处理

错误:“ xxx”不是类型

资源“ xxx”无法解析

无法使用$ {param.xxx}和HTML格式访问JSP参数

我想以XXX-XXX-XXXX格式显示电话号码。我尝试了很多方法但无法获得正确的答案

XX-XXX XXXX格式后的格式电话号码中的数字无法删除时如何删除?

存档输出错误:tar.xz:无法识别文件格式

将64位NASM与MinGW-64链接会导致“无法识别文件格式”错误

tar.xz提取错误“ xz:(stdin):无法识别文件格式”