zoukankan      html  css  js  c++  java
  • 在一个窗口中显示多个视频,并在每个子窗口左上角显示系统时间,函数cvShowManyImages是改写的

    #include <cv.h>
    #include <highgui.h>
    #include <stdio.h>
    #include <stdarg.h>
    #include <time.h>
    
    void cvShowManyImages(char* title, int nArgs, ...){
        IplImage *img;
        IplImage *DispImage;
        int size;
        int i;
        int m, n;
        
        int x, y;
          int w, h;
            // scale - How much we have to resize the image
            float scale;
            int max;
            // If the number of arguments is lesser than 0 or greater than 12
            // return without displaying
             w = 2; h = 2;
             size = 300;
            /**
            if(nArgs <= 0) {
                    printf("Number of arguments too small....
    ");
                    return;
            }
            else if(nArgs > 12) {
                    printf("Number of arguments too small....
    ");
                    return;
            }
            // Determine the size of the image,
            // and the number of rows/cols
            // from number of arguments
            else if (nArgs == 1) {
                    w = h = 1;
                    size = 300;
            }
            else if (nArgs == 2) {
                    w = 2; h = 1;
                    size = 300;
            }
            else if (nArgs == 3 || nArgs == 4) {
                    w = 2; h = 2;
                    size = 300;
            }
            else if (nArgs == 5 || nArgs == 6) {
                    w = 3; h = 2;
                    size = 200;
            }
            else if (nArgs == 7 || nArgs == 8) {
                    w = 4; h = 2;
                    size = 200;
            }
            else {
                    w = 4; h = 3;
                    size = 150;
            }
            */
             // Create a new 3 channel image
            DispImage = cvCreateImage( cvSize(100 + size*w, 60 + size*h), 8, 3 );
            // Used to get the arguments passed
            va_list args;
            va_start(args, nArgs);
            // Loop for nArgs number of arguments
           // for (i = 0, m = 20, n = 20; i < nArgs; i++, m += (20 + size)) {
            for (i = 0, m = 20, n = 20; i < nArgs; i++, m += (20 + size)) {
                    // Get the Pointer to the IplImage
                    img = va_arg(args, IplImage*);
                    // Check whether it is NULL or not
                    // If it is NULL, release the image, and return
                    if(img == 0) {
                            printf("Invalid arguments");
                            cvReleaseImage(&DispImage);
                            return;
                    }
                    // Find the width and height of the image
                    x = img->width;
                    y = img->height;
                    // Find whether height or width is greater in order to resize the image
                    max = (x > y)? x: y;
                    // Find the scaling factor to resize the image
                    scale = (float) ( (float) max / size );
                    // Used to Align the images
                    if( i % w == 0 && m!= 20) {
                            m = 20;
                            n+= 20 + size;
                    }
                    // Set the image ROI to display the current image
                    cvSetImageROI(DispImage, cvRect(m, n, (int)( x/scale ), (int)( y/scale )));
                    // Resize the input image and copy the it to the Single Big Image
                    cvResize(img, DispImage);
                    // Reset the ROI in order to display the next image
                    cvResetImageROI(DispImage);
            }
            // Create a new window, and show the Single Big Image
            //cvNamedWindow( title, 1 );
            cvShowImage( title, DispImage);
            /*cvWaitKey(0);*/
            //cvDestroyWindow(title);
            // End the number of arguments
            va_end(args);
            // Release the Image Memory
            cvReleaseImage(&DispImage);
    }
    int main(int argc,char **argv)
    {
            CvCapture *capture;
          //  int i=0;
         
           capture=cvCreateFileCapture("E:\Videos\xx.avi");
          
            IplImage *frame;
            cvNamedWindow("video",1);
            cvResizeWindow("video",700,660);
            //CvFont timeFont,timeFont1;
           // cvInitFont(&timeFont,CV_FONT_HERSHEY_COMPLEX,0.5f,0.5f,0,1,8);
           // cvInitFont(&timeFont1,CV_FONT_HERSHEY_COMPLEX,0.5f,0.5f,0,1,8);
           // char time1[25];
          //   memset(time1,0,25*sizeof(char));
            while (1)
            {
                    frame=cvQueryFrame( capture );
                    if (!frame)
                    {
                            break;
                    }
                    /**
                    IplImage *frame_not=cvCreateImage(cvGetSize(frame),frame->depth,frame->nChannels);
                    cvNot(frame,frame_not);
                    */
                   // time_t rawtime;
                 //   struct tm * timeinfo;
                  //  time ( &rawtime );
                //    timeinfo = localtime ( &rawtime );
                   
           
                 //   char *p=asctime(timeinfo);
      //数组p的第25个字符为'
    ',在图像上显示时为乱码,这里取其前24个字符显示在图像上
                   
                /** for (i=0;i<24;i++)
                    {
                    time1[i]=*p;
                    p++;
                    }
                    p=NULL;
                */   
                    IplImage *frame_gray=cvCreateImage(cvGetSize(frame),frame->depth,1);
                    IplImage *frame1=cvCreateImage(cvGetSize(frame),frame->depth,frame->nChannels);
                    IplImage *frame_canny=cvCreateImage(cvGetSize(frame),frame->depth,1);
                    IplImage *frame2=cvCreateImage(cvGetSize(frame),frame->depth,frame->nChannels);
                    cvCvtColor(frame,frame_gray,CV_RGB2GRAY);
                    cvCvtColor(frame_gray,frame1,CV_GRAY2BGR);
                    cvCanny(frame_gray,frame_canny,20,75,3);
                    cvCvtColor(frame_canny,frame2,CV_GRAY2BGR);
                  //  cvPutText(frame,time1,cvPoint(0,15),&timeFont,CV_RGB(255,0,0));
                    //cvPutText(frame1,time1,cvPoint(0,15),&timeFont,CV_RGB(255,0,0));
                   // cvPutText(frame2,time1,cvPoint(0,15),&timeFont1,CV_RGB(255,0,0));
                  //  cvPutText(frame_not,time1,cvPoint(0,15),&timeFont1,CV_RGB(255,0,0));
                  //  cvShowManyImages("video",4,frame,frame_not,frame1,frame2);
                     cvShowManyImages("video",3,frame,frame1,frame2);
                    cvWaitKey(33);
                   // cvReleaseImage(&frame_not);
                    cvReleaseImage(&frame1);
                    cvReleaseImage(&frame_gray);
                    cvReleaseImage(&frame2);
                    cvReleaseImage(&frame_canny);
           
                   
            }
                   cvDestroyWindow("video");
                   cvReleaseCapture(&capture);
            return 0;
    }

    转载自:http://www.opencv.org.cn/forum.php?mod=viewthread&tid=7996&extra=&page=1

  • 相关阅读:
    The formatter threw an exception while trying to deserialize the message in WCF
    通过Web Deploy方式部署WCF
    The Managed Metadata Service or Connection is currently not available
    How to create Managed Metadata Column
    冒泡算法
    asp.net core 实战项目(一)——ef core的使用
    Vue学习笔记入门篇——安装及常用指令介绍
    Vue学习笔记入门篇——数据及DOM
    Vue学习笔记目录
    Chart.js在Laravel项目中的应用
  • 原文地址:https://www.cnblogs.com/beihaidao/p/4887051.html
Copyright © 2011-2022 走看看