opencv拼图算法

编程环境:VS2012+OpenCV2.4.6

功能:

第一种是将指定三幅图的指定位置的像素直接搬移到新的图像上

第二种是讲指定三幅图按照我们设定好的大小非等比缩放到第三幅图上

三张源图像

opencv拼图算法_第1张图片opencv拼图算法_第2张图片


opencv拼图算法_第3张图片


两种效果图

opencv拼图算法_第4张图片



#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv;

int main()
{
	///////////////////读入图像/////////////////////////
	///////////image1
	//cv::Mat image::zeros(768,1300);
	Mat image1;
	image1= cv::imread("1.jpg");
	if(!image1.data)
	{
		cout<<"image does not exist"<<endl;
	}
	namedWindow("Image1");//定义窗口
	imshow("Image1",image1);//显示图像
	///////////image2
	Mat image2;
	image2= cv::imread("2.jpg");
	if(!image2.data)
	{
		cout<<"image does not exist"<<endl;
	}
	namedWindow("Image2");
	imshow("Image2", image2);
	//////////////image3
	Mat image3;
	image3= cv::imread("3.jpg");
	if(!image3.data)
	{
		cout<<"image does not exist"<<endl;
	}
	cv::namedWindow("Image3");
	cv::imshow("Image3", image3);

	///////////////////定义生成图像/////////////////////////
	cv::Mat combine = cv::Mat::zeros( 700, 1300,image1.type());
	//cout<<image.type()<<endl;   我擦那个哈士奇竟然是16
	// define ROI
	Mat imageROI1= combine(Rect(0,0,500,700));
	Mat imageROI2= combine(Rect(500,0,800,350));
	Mat imageROI3= combine(Rect(500,350,800,350));
	//////DEBUG
	//std::cout<<combine.cols<<" "<<combine.rows<<endl; 

	//图像直接拷贝的方式~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~••
	image1(cv::Rect( 0, 0, 500, 700)).copyTo(imageROI1);
	image2(cv::Rect( 0, 0, 800, 350)).copyTo(imageROI2);
	image3(cv::Rect( 0, 0, 800, 350)).copyTo(imageROI3);
	
	
	//////通过看到数值来验证是否是这个地方出错
	//std::cout<<combine(cv::Rect(0, 0, 3, 3))<<std::endl;
	
	
	//最终效果显示~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	namedWindow("Combined Image");
	imshow("Combined Image", combine);


	////////////////////////////////////////////////////////////////////////
	///////////////////////////另外一种方式/////////////////////////////////
	/////////////////////////////////////////////////////////////////////////
	//那么我们使用另外一种方式,就是resize的方式来搞下这个东西,恩,让所有的图像都搞到这里面

	///////////////!!!建议用等比缩放然后获得出现的黑框

	resize(image1, imageROI1, imageROI1.size(),INTER_CUBIC);
	resize(image2, imageROI2, imageROI2.size(),INTER_CUBIC);
	resize(image3, imageROI3, imageROI3.size(),INTER_CUBIC);
	
	namedWindow("Combined Image++");
	imshow("Combined Image++", combine);
	
	waitKey(0);
	
}


你可能感兴趣的:(C++,算法,opencv,计算机视觉)