将图像拷贝到待合并图像的感兴趣区域
#include<cv.h>
#include<highgui.h>
using namespace cv;
int main()
{
Mat image1=imread("1.jpg");
Mat image2=imread("2.jpg");
if (image1.empty() || image2.empty())
{
printf("open error");
return 0;
}
//1.新建一个要合并的图像
Mat img_merge;
Size size(image1.cols + image2.cols, MAX(image1.rows, image1.rows));
img_merge.create(size, CV_MAKETYPE(image1.depth(), 3));
img_merge = Scalar::all(0);
Mat outImg_left, outImg_right;
//2.在新建合并图像中设置感兴趣区域
outImg_left = img_merge(Rect(0, 0, image1.cols, image1.rows));
outImg_right = img_merge(Rect(image1.cols, 0, image1.cols, image1.rows));
//3.将待拷贝图像拷贝到感性趣区域中
image1.copyTo(outImg_left);
image2.copyTo(outImg_right);
namedWindow("image1", 0);
imshow("image1", img_merge);
waitKey();
return 0;
}
这个是原作者的,
下面是我自己改的,其中一部分代码,随意复制到感兴趣区域,
//创建拼接后的图,需提前计算图的大小
//Mat outimage(gray_left_image.cols + gray_right_image.cols-width, gray_left_image.rows,CV_8UC1); //这样建立,下面拷贝好像出错
//了,不想验证了,
Mat outimage;
Size size(gray_left_image.cols + gray_right_image.cols-width, MAX(gray_left_image.rows, gray_right_image.rows));
outimage.create(size, CV_MAKETYPE(gray_left_image.depth(), 1));//我的是灰度图,写1,上面的3,是rgb图
outimage = Scalar::all(0);
cout << "outimage.cols:" << outimage.cols<< endl;
//在新建合并图像中设置感兴趣区域
Mat outImg_left, outImg_right;
outImg_left = outimage(Rect(0, 0, gray_left_image.cols-width, gray_left_image.rows));
outImg_right = outimage(Rect(gray_right_image.cols, 0, gray_right_image.cols-width, gray_right_image.rows));//起始位置,后面两个是图像宽度,高度
cout << "outImg_left.cols:" << outImg_left.cols<< endl;
cout << "outImg_right.cols:" << outImg_right.cols<< endl;
//将待拷贝图像拷贝到感性趣区域中
outImg_left_src.copyTo(outImg_left);
outImg_right_src.copyTo(outImg_right);
可以看下差不多是下面图这样,没有图了,删除了,用了这样张,反正差不多意思,复制,到指定位置。