基本上,如果我们定义一个函数,即repeat_image,在该函数中取三个参数,一个矩阵图像和两个整数nx,ny,并通过重复图像nx返回一个nx ny倍的新图像< / em> ny次。 因此,如果初始图像是640 * 480,则repeat_image(img,2,2)将返回大小为1280 * 960的图像。 论点是: - 矩阵图像(类型Mat) - 整数nx,矩阵应沿水平轴重复的次数 - 整数ny,矩阵应沿垂直轴重复的次数
答案 0 :(得分:0)
Mat image_repeat(Mat &img, int nx, int ny)
{
Mat img_repeat(Size(nx * img.cols, ny * img.rows), CV_8UC3);
int y = 0, x = 0;
while (y < ny)
{ //0<3
while (x < nx)
{ //0<2
for (int row = 0; row < img.rows; row++)
{
for (int col = 0; col < img.cols; col++)
{
img_repeat.at<Vec3b>(Point(col + (img.cols * x), row + (img.rows * y))) =img.at<Vec3b>(Point(col, row));
}
}
x++;
}
x = 0;
y++;
}
cout << "Image Repeat Done." << endl;
return img_repeat;
}
答案 1 :(得分:0)
您可以重复图片:
cv::copyTo
在正确的投资回报率中复制源图像代码:
#include <opencv2/opencv.hpp>
using namespace cv;
Mat image_repeat(const Mat& src, int nx, int ny)
{
Mat dst(src.rows * ny, src.cols * nx, src.type());
for (int iy = 0; iy < ny; ++iy)
{
for (int ix = 0; ix < nx; ++ix)
{
Rect roi(src.cols * ix, src.rows * iy, src.cols, src.rows);
src.copyTo(dst(roi));
}
}
return dst;
}
int main()
{
Mat3b img = imread("path_to_image");
Mat3b res = image_repeat(img, 4, 3);
imshow("img", img);
imshow("res", res);
waitKey();
return 0;
}
备注强>