所以我是新手,也是c ++的新手,但我仍然坚持创建这个类来混合两个输入图像。我知道我必须创建一个空白矩阵,输入要混合的两个图像,对于空矩阵集的每个像素,它等于其他两个图像中相同像素位置的平均值,困难的部分是编写代码对于它....任何输入都非常感谢!!
答案 0 :(得分:2)
PGM格式非常简单:http://en.wikipedia.org/wiki/Portable_graymap
因此,使用该信息将图像读入数组,然后按照您的说法进行操作,迭代数组并将平均像素值粘贴到另一个数组中。然后将其写入另一个文件并使用可以查看pgm图像的图像程序来查看结果。
这里有一些代码写出一个3像素乘3像素的pgm图像:
std::cout << "P2\n";
std::cout << "3 3\n";
std::cout << "10\n";
std::cout << "0 10 0\n";
std::cout << "10 0 10\n";
std::cout << "0 10 0\n";
以下是一些使用valarray进行混合的代码:
std::valarray<int> imageA,imageB;
//add code to load image data into valarrays here
//the next line does the blending, adding corresponding pixel values together and dividing by two to get the average
std::valarray<int> blend = (imageA + imageB) / 2;
答案 1 :(得分:0)
首先,您需要从磁盘和内存中读取图像。最好找一个.png库,否则你必须自己动手。这是一个起点(http://www.libpng.org/pub/png/pngaptk.html)。
接下来,您需要从png阅读器获取输出并将其转换为您想要的格式。可能输出已经是2D数组,所以你将被设置在那里。然后你只需读取每个文件(如果它们很大,即不能适合内存)那么你需要通过磁贴或扫描线来做,平均数组,然后将你创建的新数组发送回png writer API。
如果要用c ++完成,那么这就是你可以做到的一般方法。如果你能掌握IDL或ENVI,可以在大约5行代码中完成。