/** * opencvTest:图像的拼接 * * By missingu * 2013.11.05 */ #include "stdafx.h" #include <opencv2\opencv.hpp> #include <opencv2\highgui\highgui_c.h> using namespace cv; using namespace std; int main() { IplImage * pImg = cvLoadImage(".\\cloud3319.jpg" , CV_LOAD_IMAGE_ANYCOLOR|CV_LOAD_IMAGE_ANYDEPTH) ; if( pImg == NULL ) { printf(" cannot open img\n") ; return -1 ; } //const int params[2] = { CV_IMWRITE_JPEG_QUALITY , 100 } ;// opencv 默认压缩比是95 //cvSaveImage( ".\\test.jpg" , pImg ,(const int *)params) ; //图像拼接 Rect rect ; rect.x = 0 ; rect.y = 0 ; rect.width = 1100 ; rect.height = 1100 ; //IplImage *dst = cvCreateImage(cvSize( pImg->width ,pImg->height) , IPL_DEPTH_8U , 3 ) ; // 注意上下要一样 , 这儿的大小可以不是原始图像的大小,但是要比原始图像大。 IplImage *dst = cvCreateImage(cvSize( 1100*9 ,1100*8) , IPL_DEPTH_8U , 3 ) ; // 注意上下要一样 , 这儿的大小可以不是原始图像的大小,但是要比原始图像大。 cvSetZero(dst) ; // 初始化test printf("pImg = %d\n" , pImg->imageSize) ; printf("dst = %d\n" , dst->imageSize) ; for( int i = 0 ;i < 2 ; i++ ) { cvSetImageROI( dst , Rect( 0 , i*pImg->height , pImg->width , pImg->height) ) ; // 注意上下要一样 ,此处的大小必须是原始图像的大小,否则是不行的, //cvSetImageROI( dst , Rect( 0 , 0 , 1100 , 1100) ) ; ///pImg->imageData = pImg->imageData+i*1100*3*1100 ; cvCopy(pImg , dst , NULL ) ; //输入输出数组必须是同样的类型、维数和大小 cvResetImageROI(dst) ; // 释放感兴趣的区域 } cvSaveImage("dst.jpg" , dst) ; /* Mat img = imread("c:/pp.jpg"); if(img.empty()) { cout<<"error"; return -1; } imshow("照片",img); waitKey(); */ return 0; }