2012-02-07 66 views
0

我是一个令人沮丧的C++新手,他想要从图像文件中提取像素矩阵,进行一些转换,然后将修改过的矩阵输出为我的图像格式选择。在C++中读取/操作图像

我给了libpng一个尝试,它的API是一团糟,难以阅读。有趣的是,有人说它是最适合C++的。我给了我的软件开发人员表哥打电话,他告诉我使用OpenGL。所以,我做了一些谷歌搜索,但我仍然没有找到直接的答案。

看起来越来越简单的“int * readPNG(char * path)”当Java,Matlab和python等标准库中包含这些东西时,要求太多了。这太荒谬了!你的专业人员是如何来的,你使用了哪些图书馆?

还有一些微不足道的C++问题: - 有没有什么办法像层次结构一样在Java中使用包?我在Visual C++中尝试了过滤器,但它们看起来并不一样。 - 是否有任何方法可以为运行时故障获得易于理解的堆栈跟踪?

回答

0

尝试OpenCV。这是一个图像处理库,具有非常简单的功能,用于编辑和保存图像。它会满足你的目的。它还带有非常优雅的文档。

1

我发现ImageMagick的Magick++ library是以编程方式处理图像格式化数据最有用的工具。

C++具有像Java这样的命名空间,但它们使用起来更加困难,并且可能只会使事情变得不可读。至于栈跟踪,我建议梳理现有的stackoverflow答案。总之,这并不简单。

+0

应该避免C++的命名空间?这对我来说是新闻。 – 2012-02-07 00:39:50

+0

C++名称空间如何比Java包“更难使用”?只需写'namespace foo {...}'而不是'package foo;'和'using namespace foo;'而不是'import foo。*;'。 – 2012-02-07 00:40:46

+0

我对这里的争论不感兴趣(它实际上应该是一个单独的问题),但我相信C++中的命名空间并不像Java软件包那么简单。请注意,我没有在任何地方使用“避免”一词。鉴于更详细的语法,声明和定义之间的差异,“使用命名空间”语法(特别是在头文件中)的危险性,以及与C++的高级功能(例如模板,操作符重载)的交互,我认为它们更多比Java软件包复杂,不一定是新手友好的。 – zdv 2012-02-07 01:16:00

0

我建议你改进你的Google-fu。 C++有很多图像处理库,其中包括Boost Generic Image Library,它与标准接近。如果你没有安装Boost,并且安装库很少,你可以试试The CImg Library

至于你的其他问题(例如堆栈跟踪),你需要提出不同的问题。

0

我建议Magick++,C++ API到ImageMagick。对于软件包:你可以使用命名空间,但这与Java的软件包几乎没有可比性(没有软件包级访问等)。他们主要是他们所谓的:一种手段来组织名称

堆栈跟踪在C++中不是微不足道的。并且我没有意识到实现它们的平台无关的方式。

如果您需要这些功能,我只是想知道为什么不坚持使用Java或Python或类似的东西? ...

0

1)尝试freeImage - 使用非常简单,文档可读。 freeimage site

2)堆栈跟踪:您正在使用哪个环境?在Visual Studio中有Stack窗口(Debug/Windows/Call Stack - Alt 7), 您也可以使用DebugView和OutputDebugString - 并不真正跟踪堆栈,但可以在调试时非常有用。 。

0

我推荐DevIL(以前称为OpenIL)。它具有读写支持17 formats,并支持更多只读。

+0

我在VISTA上使用Visual C++ 2010。我试图安装魔鬼,但它不起作用。我双击保护/ msvc9/ImageLib.sln - 没有运气。然后,我尝试了子文件夹中的.vcxproj文件,但它们不能编译。 我也尝试FreeImage,它确实安装。但是当我打开解决方案时,它是空的。我试图使用Cygwin使用Makefile和Makefile.cygwin,他们抛出了一堆错误。 我将不胜感激如何安装和使用其中之一的建议。谢谢。我从来不必浪费这么多时间来使用Java和Python库。我觉得我的头会愤怒。 – 2012-02-09 23:55:25

+0

看来我没有在FreeImage库上正确制作,所以我会再试一次。魔鬼仍然没有运气。说明看起来非常过时。 – 2012-02-10 00:11:39

+0

好的。我放弃在Visual Studio C++上安装它们,并且将简单地将所有.h和.cpp包含在classpath中。 – 2012-02-10 00:30:06

0

这是我的回答我自己的问题在这里:

与安装有Visual Studio 2010中的一些建议图书馆那里有问题,能提供几乎无指示安装使用Visual Studio(即FreeImage的),或只是有可笑的凌乱API(即libpng)。

如果您是C/C++的新手,请注意选择什么库。即使有技术论坛与知道所有答案的专家一起漫游,你很可能会在自己的花费时间尝试并拼凑有经验的志愿者可以用两句话(如果他们困扰)轻松回答的线索。

现在,对我有用的是OpenCV图像库(http://opencv.willowgarage.com/),它由Mister daerty0153在那里引入。当你在网站上时,不要从sourceforge下载超级包。请阅读安装说明(http://opencv.willowgarage.com/wiki/InstallGuide)并选择您使用的平台。

就我而言,我使用Visual Studio 2010作为我的IDE,因此这是实际的子页面是相关的:http://opencv.willowgarage.com/wiki/VisualC%2B%2B

一个问题我遇到的是让VS2010识别.dll文件,而不是按照补救这些说明。我的解决方案是将它们全部复制到我的项目文件夹中,并解决了所有问题。有人建议这是一个VS 2010的错误。

希望它可以帮助其他患有相同情况的患者。

+0

这应该是一个评论,而不是一个答案。如果有特定的答案(例如[daerty0153's](http:// stackoverflow。com/a/9169476/313063))解决了你的问题,你应该[接受它](http://meta.stackexchange.com/questions/5234)。此外,你没有经验丰富的志愿者检查所有2句话的答案。我建议使用[CImg](http://cimg.sourceforge.net/),它保存在单个头文件中,没有什么可安装的(没有DLL或任何东西)。只需要花费大约5分钟的时间就可以避免浪费2天时间来编辑6个图书馆。 – 2012-02-13 05:37:02