如何快速创建一堆覆盖两个图像的图像?
How can I create a bunch of images overlaying two images quickly?
我正在尝试使用 ImageMagick GraphicsMagick 和 CImg,但完成 10,000 张图像需要 10 分钟。
我需要在 3 分钟内完成。
我怎样才能更快地完成这项任务?
这是我的代码:
#define cimg_use_png
#define cimg_display 0
#include "CImg.h"
#include <iostream>
#include <vector>
using namespace cimg_library;
int main() {
for (int i = 0; i < 10000; ++i){
CImg<unsigned char> gradient("gradient.png");
CImg<unsigned char> overlay("overlay.png");
gradient.draw_image(80,150,overlay);
gradient.save_png("result.png");
}
}
如何使用其他库或其他语言更快地完成此操作?我有一个 2 Ghz 处理器和 4 GB 内存。
请帮帮我
最慢的部分是 PNG i/o 操作的解码和编码。如果我们可以将 read 操作移到 for 循环之外,并使用 copy constructor 克隆图像 data,那么我们应该能够在3分钟内提升速度
#define cimg_use_png
#define cimg_display 0
#include "CImg.h"
#include <iostream>
#include <vector>
using namespace cimg_library;
int main() {
CImg<unsigned char> parent_gradient("gradient.png");
CImg<unsigned char> parent_overlay("overlay.png");
for (int i = 0; i < 10000; ++i){
CImg<unsigned char> gradient(parent_gradient);
CImg<unsigned char> overlay(parent_overlay);
gradient.draw_image(80,150,overlay);
gradient.save_png("result.png");
}
}
我们可以通过实施 OpenMP 在 CPU 线程之间分配工作负载来走得更远。在我的 mac 上,这将 10000 次迭代减少到 20 秒以下。
#define cimg_use_png
#define cimg_display 0
#include "CImg.h"
#include <iostream>
#include <vector>
using namespace cimg_library;
int main() {
CImg<unsigned char> parent_gradient("gradient.png");
CImg<unsigned char> parent_overlay("overlay.png");
#pragma omp parallel for
for (int i = 0; i < 10000; ++i){
CImg<unsigned char> gradient(parent_gradient);
CImg<unsigned char> overlay(parent_overlay);
gradient.draw_image(80,150,overlay);
gradient.save_png("result.png");
}
}
我正在尝试使用 ImageMagick GraphicsMagick 和 CImg,但完成 10,000 张图像需要 10 分钟。
我需要在 3 分钟内完成。
我怎样才能更快地完成这项任务?
这是我的代码:
#define cimg_use_png
#define cimg_display 0
#include "CImg.h"
#include <iostream>
#include <vector>
using namespace cimg_library;
int main() {
for (int i = 0; i < 10000; ++i){
CImg<unsigned char> gradient("gradient.png");
CImg<unsigned char> overlay("overlay.png");
gradient.draw_image(80,150,overlay);
gradient.save_png("result.png");
}
}
如何使用其他库或其他语言更快地完成此操作?我有一个 2 Ghz 处理器和 4 GB 内存。
请帮帮我
最慢的部分是 PNG i/o 操作的解码和编码。如果我们可以将 read 操作移到 for 循环之外,并使用 copy constructor 克隆图像 data,那么我们应该能够在3分钟内提升速度
#define cimg_use_png
#define cimg_display 0
#include "CImg.h"
#include <iostream>
#include <vector>
using namespace cimg_library;
int main() {
CImg<unsigned char> parent_gradient("gradient.png");
CImg<unsigned char> parent_overlay("overlay.png");
for (int i = 0; i < 10000; ++i){
CImg<unsigned char> gradient(parent_gradient);
CImg<unsigned char> overlay(parent_overlay);
gradient.draw_image(80,150,overlay);
gradient.save_png("result.png");
}
}
我们可以通过实施 OpenMP 在 CPU 线程之间分配工作负载来走得更远。在我的 mac 上,这将 10000 次迭代减少到 20 秒以下。
#define cimg_use_png
#define cimg_display 0
#include "CImg.h"
#include <iostream>
#include <vector>
using namespace cimg_library;
int main() {
CImg<unsigned char> parent_gradient("gradient.png");
CImg<unsigned char> parent_overlay("overlay.png");
#pragma omp parallel for
for (int i = 0; i < 10000; ++i){
CImg<unsigned char> gradient(parent_gradient);
CImg<unsigned char> overlay(parent_overlay);
gradient.draw_image(80,150,overlay);
gradient.save_png("result.png");
}
}