使用C ++或C语言处理图像

首先是我是初学者。 好的?

我已经阅读了相关的答案和问题,但请帮我解决这个问题:

如何在C ++中打开JPEG图像文件,将其转换为灰度图像,获取其直方图,将其调整为较小的图像,裁剪其特定区域或显示其特定区域?

对于这些任务,C或C ++一般更快吗?

哪些库最简单,最快? 运行时间非常重要。

谢谢。

这是一个使用magick库的例子。

读取图像,裁剪图像并将其写入新文件的程序(exception处理是可选的,但强烈建议):

#include  #include  using namespace std; using namespace Magick; int main(int argc,char **argv) { // Construct the image object. Seperating image construction from the // the read operation ensures that a failure to read the image file // doesn't render the image object useless. Image image; try { // Read a file into image object image.read( "girl.jpeg" ); // Crop the image to specified size (width, height, xOffset, yOffset) image.crop( Geometry(100,100, 100, 100) ); // Write the image to a file image.write( "x.jpeg" ); } catch( Exception &error_ ) { cout << "Caught exception: " << error_.what() << endl; return 1; } return 0; } 

在这里查看更多示例

对于基本的图像处理,您也可以尝试Qt的QImage类(和其他)。 这为您提供了打开,缩放,resize,裁剪,像素处理和其他任务的基本function。

否则你可以像已经说过的那样使用ImageMagick或OpenCV。 OpenCV为许多图像处理/图像识别任务提供了很多例子……

希望能帮助到你…

在C和C ++中有许多用于处理图像的好库,其中没有一个明显优于其他所有库。 OpenCV wiki , 项目页面对其中一些任务有很大支持,而ImageMagick wiki , 项目页面擅长其他任务。 JPEG组也有自己的JPEG处理函数实现。 这些可能是很好的资源; API文档可以更具体地指导您如何使用其中的每一个。

至于C或C ++库是否必然更快,两者之间没有明显的赢家。 毕竟,您始终可以使用C ++编译C库。 也就是说,由于语言的复杂性,C ++库往往有点难以接受,但是一旦你对语言有了良好的感觉,就会更容易使用。 (我对C ++有点偏见,所以一定要考虑来源)。 我建议您使用您认为更容易完成任务的任何语言; 这里也不是一个糟糕的选择,特别是如果表现很重要的话。

祝你的项目好运!

libgd是关于最简单,最轻量级的解决方案。

 gdImageCreateFromJpeg gdImageCopyMergeGray gdImageCopyResized 

哦,这都是C.

如果运行时间非常重要,那么你必须考虑将处理工作卸载到GPU芯片的图像处理库,例如:

  • 核心图像(Osx)
  • OpenVIDIA(Windows)
  • GpuCV(Windows,Linux)