我有一堆已知大小的png图像,它们是较大图像的一部分。我知道要放置图像的位置来构建整个图像,即我知道每个子图像的左上角坐标。如何在C ++中构建更大的图像?有没有可以为我做这个的图书馆?任何示例代码的链接也都很棒。
答案 0 :(得分:0)
尝试ImageMagick,特别是Magick++ API。
如果您只定位一个平台(比如Windows),可能会有一些不需要库的简单解决方案。
答案 1 :(得分:0)
您可以使用The CImg Library。它是一个轻量级的库,由几个文件组成。主文件是 CImg.h 。
有 draw_image 功能可以在当前图像上绘制另一个图像 - 这正是您所需要的。
以下是声明:
template<typename T>
struct CImg {
// ..... other code
//! Draw an image \overloading.
template<typename t>
CImg<T>& draw_image(const int x0, const int y0, const CImg<t>& sprite, const float opacity=1);
// ..... other code
};
(x0 =宽度pos,y0 =行位置是原始图像中要绘制精灵图像的起始位置。
答案 2 :(得分:0)
您可以尝试OpenCV
。
首先,您必须打开所有小文件(解释为S2931)并将其存储为cv::Mat
。打开所有小图像后,通过将它们复制到指定区域,可以将它们全部放在一起形成更大的图像。
当您完成这些图片放在一起时,只需使用上面链接中的imwrite
将新图像保存到png文件中。
示例代码将图像水平放置在一起的位置(因此最大行数):
#include <cv.h>
#include <highgui.h>
#include <opencv2/opencv.hpp>
int main(int argc, char *argv[])
{
// check if arguments were given correctly
cv::Mat img1 = cv::imread(argv[1]);
cv::Mat img2 = cv::imread(argv[2]);
// load more images if necessary
// If images have alpha channel then use CV_8UC4
cv::Mat whole = cv::Mat((img1.rows<img2.rows?img2.rows:img1.rows), img1.cols+img2.cols, CV_8UC3);
img1.copyTo(whole(cv::Rect(0, 0, img1.cols, img1.rows)));
img2.copyTo(whole(cv::Rect(img1.cols, 0, img2.cols, img2.rows)));
// add more images if necessary
imwrite("whole.png", whole);
return 0;
}