绘制图像最简单的方法是什么?

13
假设您想从硬盘中读取一个常见的图像文件格式,更改一个像素的颜色,并在屏幕上显示结果图像。使用C++,以下是建议使用最少的代码完成以上操作的(开源)库:

另外,哪个库可以以最优雅的方式实现上述操作?

一些背景信息:我最近一直在阅读计算机图形学的文献,发现有很多相对简单的基于像素的算法我想要实现。然而,虽然算法本身通常很容易实现,但必须按每个像素的基础来操作图像并显示结果所需的框架却阻止了我的行动。

1
仅仅显示就需要很多代码,而且还与系统有关。您是否已经在使用某个GUI库?您使用的是哪个平台? - Martin v. Löwis
Martin:目前还没有源代码。(实际上有,但是很小,我不会犹豫重新开始) - Benno
4
这是一个永恒的C++问题,已经得到5个赞的支持。在图形用户界面成为主流20多年后,显示图像这个核心问题仍然让使用该语言的从业者感到困扰。不好。 - Hans Passant
@Hans:有点像,但又不完全一样。问题在于有很多可用的库,只是哪一个被推荐使用。对于语言来说,拥有多个提供GUI功能的库是一件坏事吗? - jalf
3个回答

11

CImg库易于使用。

CImg<unsigned char> img("lena.png");              // Read in the image lena.png
const unsigned char valR = img(10,10,0,0);        // Read the red component at coordinates (10,10)
const unsigned char valG = img(10,10,0,1);        // Read the green component at coordinates (10,10)
const unsigned char valB = img(10,10,2);          // Read the blue component at coordinates (10,10) (Z-coordinate omitted here).
const unsigned char avg = (valR + valG + valB)/3; // Compute average pixel value.
img(10,10,0) = img(10,10,1) = img(10,10,2) = avg; // Replace the pixel (10,10) by the average grey value.
CImgDisplay main_disp(img, "Modified Lena");      // Display the modified image on the screen
img.save("lena_mod.png");                         // Save the modified image to lena_mod.png

它也可以被用作相当强大的图像处理库。在这里看例子


对于一个更简单的程序("希望代码量最少"是需求),不要显示图片,只输出修改后的图片,并使用单独的图片查看器程序。 - Raedwald
@Raedwald“并将生成的图像显示到屏幕上”<-这让我觉得OP想要从程序中启动一个图像查看器。但只有一行,所以我认为没必要担心。 - moinudin
@Viet 它使用ImageMagick,所以是的。 - moinudin

5
你应该了解OpenCV库,特别是如果你正在进行计算机图形学的理论研究。

更豪华的选择是英特尔性能原语库 :) - 9dan
如果你想要的不仅仅是一个像素,那么+1我的选择...因为某些原因,我认为OpenCV是从英特尔库开始的...这个想法是错误的吗? - kenny

0

如果目标应用程序仅限于Windows,您可以使用GDI+,在这里这里进行了描述。这里是使用GDI+进行图像处理的许多概念证明之一。

编辑:该库未开源,自Windows XP以来已包含在操作系统中(可安装在98和2000上),API是公开可用的,并且它为您提供了许多可用于更复杂算法中的图像处理功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接