3路视频大于屏幕问题

来源:互联网 发布:豆瓣八组 知乎 编辑:程序博客网 时间:2024/06/07 22:41
#ifndef _DEBUG#pragma comment(lib,"opencv_core246")#pragma comment(lib,"opencv_highgui246")#pragma comment(lib,"opencv_imgproc246")#else#pragma comment(lib,"opencv_core246d")#pragma comment(lib,"opencv_highgui246d")#pragma comment(lib,"opencv_imgproc246d")#endif#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <opencv2/objdetect/objdetect.hpp>#include <iostream>#include <vector>#include <stdio.h>using namespace cv;using namespace std;// 图像翻转(镜像)  void ImageReversal(IplImage* imgsrc)  {  Mat img = imgsrc;int tempb,tempg,tempr;int height = img.rows;int width = img.cols;for (int y=1;y<height-1;y++){uchar* imgP=img.ptr<uchar>(y);for (int x=0;x<width/2;x++){tempb=imgP[3*x];tempg=imgP[3*x+1];tempr=imgP[3*x+2];imgP[3*x] = imgP[3*(width-x)];imgP[3*x+1] = imgP[3*(width-x)+1];imgP[3*x+2] = imgP[3*(width-x)+2];imgP[3*(width-x)] = (uchar)tempb;imgP[3*(width-x)+1] = (uchar)tempg;imgP[3*(width-x)+2] = (uchar)tempr;}}//cout << (getTickCount()-t)*1.0/getTickFrequency() << endl;waitKey(33);}  //逆时针旋转图像degree角度(原尺寸)void rotateImage(Mat img, Mat img_rotate,int degree){//旋转中心为图像中心CvPoint2D32f center;  center.x=float (img.cols/2.0+0.5);center.y=float (img.rows/2.0+0.5);//计算二维旋转的仿射变换矩阵float m[6];            Mat M( 2, 3, CV_32F, m );//Mat getRotationMatrix2D(Point2f center, double angle, double scale)M = getRotationMatrix2D(center, degree,1);//cv2DRotationMatrix( center, degree,1, &M);//void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())//变换图像,并用黑色填充其余值warpAffine(img,img_rotate,M,img.size());//cvWarpAffine(img,img_rotate, &M,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,cvScalarAll(0) );}int main(int ac, char** av){CvCapture* capture0 = cvCreateCameraCapture( 1 ); CvCapture* capture1 = cvCreateCameraCapture( 0 ); //CvCapture* capture2 = cvCreateCameraCapture( 2 ); IplImage *frame0,*frame1,*frame2;int64 t=0;Mat frame0_Mat,frame1_Mat;Mat panorama_Mat(480*1.2,640*4.1,CV_8UC3);while (1){t = getTickCount();frame0 = cvQueryFrame( capture0 );frame1 = cvQueryFrame( capture1 );//frame2 = cvQueryFrame( capture2 );frame0_Mat = frame0;frame1_Mat = frame1;//两个图像融合为一个cv::Mat panorama_0(panorama_Mat,cv::Rect(0,15,frame0->width,frame0->height));frame0_Mat.copyTo(panorama_0);cv::Mat panorama_1(panorama_Mat,cv::Rect(frame1_Mat.cols-25,0,frame1_Mat.cols,frame1_Mat.rows));frame1_Mat.copyTo(panorama_1);cv::Mat panorama_2(panorama_Mat,cv::Rect(frame1_Mat.cols*2-25,0,frame1_Mat.cols,frame1_Mat.rows));frame1_Mat.copyTo(panorama_2);//rotateImage(frame1, frame1, 180);  //ImageReversal(frame1);//cvShowImage("frame0",frame0);//cvShowImage("frame1",frame1);//cvShowImage("frame2",frame2);imshow("panorama_Mat",panorama_Mat);int key = cvWaitKey(33);if( key == 27 ) break;cout << (getTickCount()-t)*1.0/getTickFrequency() << endl;}cout << "EORROR" << endl;cvWaitKey(0);cvDestroyWindow("left");cvDestroyWindow("mid");cvDestroyWindow("right");return 0;}

0 0