用C ++读取/操作图像

时间:2012-02-07 00:29:45

标签: c++ image image-processing

我是一个沮丧的C ++新手,他想完成从图像文件中提取像素矩阵的简单任务,进行一些转换,然后将修改后的矩阵输出到我选择的图像格式。

我已经尝试了libpng,它的API很乱,几乎无法读取。有趣的是,有些人说这是C ++的最佳选择。我给我的软件开发人员堂兄打电话,他告诉我使用OpenGL。所以,我做了一些谷歌搜索,我仍然没有找到一个直接的答案。

看起来简单的“int * readPNG(char * path)”对于Java,Matlab和python之类的东西在标准库中包含这些内容时要求太多了。这太荒谬了!你是如何获得专业人士的?你使用的是哪些图书馆?

还有一些简单的C ++问题: - 有没有办法在层次结构中组织类,比如如何在Java中使用包?我在Visual C ++中尝试了过滤器,但它们看起来并不相同。 - 有没有办法让运行时失败的易于理解的堆栈跟踪?

7 个答案:

答案 0 :(得分:1)

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

C ++具有像Java这样的命名空间,但它们使用起来要困难得多,而且可能只会降低可读性。至于堆栈跟踪,我建议梳理现有的stackoverflow答案。简而言之,这并不简单。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我建议使用Magick++ImageMagick的C ++ API。

至于包:您可以使用命名空间,但这与Java的包(没有包级访问等)几乎不可比。他们主要是他们所谓的:组织名称的方式

堆栈跟踪在C ++中并不重要。

并没有与平台无关的实现方式。

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

这是我对这个问题的回答:

有些建议的库存在使用Visual Studio 2010进行安装的问题,实际上没有提供使用Visual Studio(即FreeImage)安装的说明,或者只是简单地使用可疑的API(即libpng)。

如果您不熟悉C / C ++,请注意选择哪个库。即使有技术论坛漫游与了解所有答案的大师,你很可能在自己的消费日试验并拼凑出经验丰富的志愿者可以用2句话轻松回答的线索(如果他们感到困扰)。

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

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

我遇到的一个问题是让VS2010识别.dll文件,并且没有按照这些说明进行补救。我的解决方案是将所有这些复制到我的项目文件夹,这解决了所有问题。有人认为这是VS 2010的错误。

希望它可以帮助其他人遭遇同样的情况。