zoukankan      html  css  js  c++  java
  • 使用opencv初体验

    如何加载一张图片


    #include "stdafx.h"
    #include <opencv2opencv.hpp>
    #include <iostream>
    #include <string>
    #include "cv.h"
    using namespace cv;
    using namespace std;
    int main()
    {
        IplImage* img0=cvLoadImage("d:\p.jpg",0 ); 
        
        cvShowImage("一个美女",img0);
        waitKey(3000);
        cvReleaseImage(&img0);
        cvDestroyAllWindows();
    }

    如何播放视频并且显示播放条,自动更新


    // ex1.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <opencv2opencv.hpp>
    #include <iostream>
    #include <string>
    #include "cv.h"
    using namespace cv;
    using namespace std;
    int g_position=0;
    int g_pos;
    CvCapture* g_capture=NULL;
    
    void onTrackbar(int pos){
        cvSetCaptureProperty(g_capture ,CV_CAP_PROP_POS_FRAMES,pos);
        g_pos=pos;
        
    }
    
    int main()
    {
        
        cvNamedWindow("Playing",CV_WINDOW_AUTOSIZE);
    
        g_capture =cvCreateFileCapture("D:\t.mkv");
        int frames=(int) cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);
        if(frames !=0){
            cvCreateTrackbar ("Postion","Playing",&g_position,frames ,onTrackbar);
        }
        
        IplImage* ip;
        while(1){
            ip=cvQueryFrame(g_capture);
            if(!ip){
                break;
            }
            g_pos++;
            cvShowImage ("Playing",ip);
            if(g_pos%100==0){
                cvSetTrackbarPos("Postion","Playing",g_pos);
            }
            char c=waitKey (24);
            if(c==27){
                break;
            }
            
            
        }
        waitKey(0);
        cvReleaseCapture(&g_capture );
        cvDestroyAllWindows();
        return 0;
    }

    拍照


    // ex1.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <opencv2opencv.hpp>
    #include <iostream>
    #include <string>
    #include "cv.h"
    using namespace cv;
    using namespace std;
    
    // 实现将拍下来的图片缩放一倍
    IplImage* DoPyrDown(IplImage* image, int filter = IPL_GAUSSIAN_5x5)
    {
        // 设置大小缩小一倍
        CvSize size = cvSize(image->width / 2,image->height / 2);
        //初始化图片
        IplImage* outImage = cvCreateImage(size,image->depth,image->nChannels);
        //实现缩放
        cvPyrDown(image,outImage);
        cvReleaseImage(&image);
        return outImage;
    }
    int main()
    {
        CvCapture* capture;
         // 首先是要通过摄像设备来得到一个CvCapture对象
        capture = cvCreateCameraCapture(0);
        cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH ,1280);
        cvSetCaptureProperty(capture ,CV_CAP_PROP_FRAME_HEIGHT, 720);
        assert(NULL != capture);    
        IplImage* frame;
    
        char keyCode;
        // 每隔30ms捕捉一次视频图像
        // 可以设为while(1)  使得实时捕捉视频画面
        while((keyCode = cvWaitKey(30)))
        {
            //表示按下了ESC键,退出
            if(keyCode == 27)
            {
                break;
            }
                    
            // 得到摄像设备的下一帧图像
            frame = cvQueryFrame(capture);
            
            //表示按下了回车键,此时应当保存照片
            if(keyCode == 13)
            {
                //初始化一张图片
                IplImage* outImage = cvCreateImage(cvGetSize(frame),frame->depth,frame->nChannels);
                // 将原图拷贝过来
                cvCopy(frame,outImage,NULL);
                //实现缩放操作
                //outImage = DoPyrDown(outImage);
                //设置保存的图片名称和格式
                char* outImageName = "test.jpg";
                //保存图片
                cvSaveImage(outImageName,outImage);
                cvReleaseImage(&outImage);
                printf(" 恭喜你,保存图片成功!
    ");
            }
            
            if(!frame)
            {
                break;
            }
    
            cvShowImage("vedio",frame);
        }
        cvReleaseImage(&frame);
        cvDestroyAllWindows();
        return 0;
    }
        

    录像


    // ex1.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <opencv2opencv.hpp>
    #include <iostream>
    #include <string>
    #include "cv.h"
    using namespace cv;
    using namespace std;
    
    int main()
    {
        
        
        cvNamedWindow("vedio");
        CvCapture* capture;
         // 首先是要通过摄像设备来得到一个CvCapture对象
        capture = cvCreateCameraCapture(0);
        cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH ,1280);
        cvSetCaptureProperty(capture ,CV_CAP_PROP_FRAME_HEIGHT, 720);
        //assert(NULL != capture);
        CvSize size = cvSize(1280,720);
        //需要初始化一个写视频文件的对象,这里注意使用的编解码器格式是MJPG  帧率设置为5
        CvVideoWriter* videoWriter =
            cvCreateVideoWriter("test.avi",CV_FOURCC('M','J','P','G'),15,size);
    
        IplImage* frame;
    
        char keyCode;
        // 每隔30ms捕捉一次视频图像
        // 可以设为while(1)  使得实时捕捉视频画面
        while((keyCode = cvWaitKey(30)))
        {
            //表示按下了ESC键,退出
            if(keyCode == 27)
            {
                break;
            }
                    
            // 得到摄像设备的下一帧图像
            frame = cvQueryFrame(capture);
            //将帧写入视频文件中
            cvWriteFrame(videoWriter,frame);
            //表示按下了回车键,此时应当保存照片
            
            if(!frame)
            {
                break;
            }
    
            cvShowImage("vedio",frame);
        }
        cvReleaseVideoWriter(&videoWriter); 
        cvReleaseImage(&frame);
        cvDestroyAllWindows();
        return 0;
    }

  • 相关阅读:
    SharpDeveloeper开发ASP.NET MVC汗流浃背
    暂停更新文章通知
    一步步学习NHibernate(10)——连接查询和子查询(2)
    一步步学习NHibernate(9)——连接查询和子查询(1)
    20165103 2017-2018-2 课程总结
    Android开发学习——UI篇1.0
    团队作业(三):确定分工
    20165103实验三 Java面向对象程序设计
    查漏补缺
    20165103 实验三 Java面向对象程序设计
  • 原文地址:https://www.cnblogs.com/bq12345/p/3438402.html
Copyright © 2011-2022 走看看