【发布时间】:2014-11-08 19:28:26
【问题描述】:
我的计算机科学课有一个特殊的任务,我们必须通过执行以下操作来减小图像的大小:
- 求 n × n 像素块的平均颜色(n 由下式给出 用户)通过平均每个块的 R、G 和 B 值。
- 将该颜色封装到一个像素中(只是一个普通的旧数据类)。
- 根据现有像素创建新图像。
当我说找到平均值时,我的意思是每个块的平均颜色(如下所示,只是更小):
上面的图片会生成一个 4px * 3px 的图片缩略图。实际上,我们会将这些块制作成大约 10 像素左右的正方形。如果图像不能完全被块大小整除,我们应该忽略多余的像素。
可以直接访问图像的像素:
pixels[x][y].red = 130;
pixels[x][y].blue = 200; // etc
并且可以通过以下方式创建图像:
image x;
x.createNewImage(xSize, ySize);
pixel** xPixels = x.getPixels();
//then you can assign as above.
在尝试了很多不同的事情之后,我仍然不清楚如何解决这个问题。
【问题讨论】:
-
从创建一个函数开始,它找到一个 n × n 像素块的平均颜色,从 n=1 开始
-
我想你有办法加载图片。怎么得到图片的大小?
-
@Christophe 可以通过在图像对象上调用 getWidth() 和 getHeight() 来做到这一点。即
img.getWidth()或img.getHeight() -
@Wimmel 这与我一直在尝试的类似。 “从 n=1 开始”是什么意思?
-
我的意思是从一个计算 1px * 1px 块的平均值的函数开始。这应该不会太难......
标签: c++ image-processing