在C++中读取/操作图像

Reading/manipulating images in C++

本文关键字:操作 图像 读取 C++      更新时间:2023-10-16

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

我已经尝试过libpng,它的API一团糟,几乎不可读。有趣的是,有些人说它是C++中最好的。我给我的软件开发人员表弟打了个电话,他告诉我要使用OpenGL。所以,我在谷歌上搜索了一下,仍然没有找到一个直接的答案。

当Java、Matlab和python等的标准库中包含这些东西时,获得一个简单的"int*readPNG(char*path)"似乎太难了。这太荒谬了!你的专业人士是怎么来的?你使用什么库?

还有一些琐碎的C++问题:-有没有什么方法可以像Java中使用包那样在层次结构中组织类?我在Visual C++中尝试过过滤器,但它们似乎不一样。-有没有什么方法可以为运行时故障获取易于理解的堆栈跟踪?

尝试OpenCV。它是一个图像处理库,具有编辑和保存图像的非常简单的功能。这将达到你的目的。它还附带了非常优雅的文档。

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

C++有类似Java的名称空间,但它们更难使用,可能只会降低可读性。至于堆栈跟踪,我建议梳理现有的堆栈流答案。简而言之,这并不简单。

我建议你改进你的谷歌功能。C++有很多图像处理库,包括Boost Generic图像库,它非常接近标准。如果你没有安装Boost,也没有安装库,你可以试试CImg库。

至于您的其他问题(例如堆栈跟踪),您需要单独提问。

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

至于包:您可以使用名称空间,但这与Java的包(没有包级别的访问等)不太一样。它们大多是所谓的:一种组织名称的方法。

堆栈跟踪在C++中并非微不足道。而且据我所知,没有一种独立于平台的方式来实现它们。

如果你需要这些功能,我只是想知道为什么你不坚持使用Java或Python之类的。。。

1)尝试freeImage-非常容易使用,文档可读。免费图像站点

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

我推荐DevIL(以前称为OpenIL)。它支持17种格式的读写,并支持更多的只读格式。

这是我对自己问题的回答:

一些建议的库在安装Visual Studio 2010时存在问题,实际上没有提供使用Visual Studio安装的说明(即FreeImage),或者只是API(即libpng)混乱得离谱。

如果你是C/C++的新手,请小心选择什么库。即使有技术论坛上到处都是知道所有答案的大师,你也很可能会自己花上几天的时间来尝试和拼凑经验丰富的志愿者本可以用两句话轻松回答的线索(如果他们愿意的话)。

现在,对我有效的是OpenCV图像库(http://opencv.willowgarage.com/),这是由daerty0153先生介绍的。当你访问网站时,不要从sourceforge下载超级包。相反,请阅读安装说明(http://opencv.willowgarage.com/wiki/InstallGuide)并选择您使用的平台。

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

我遇到的一个问题是让VS2010识别.dll文件,并且无法按照这些说明进行修复。我的解决方案是将它们全部复制到我的项目文件夹中,这样就解决了所有的问题。一些人认为这是VS 2010的错误。

希望它能帮助其他同样处境的人。