使用opencv初体验

如何加载一张图片


 

#include "stdafx.h"
#include <opencv2\opencv.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 <opencv2\opencv.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 <opencv2\opencv.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(" 恭喜你,保存图片成功!\n");
        }
        
        if(!frame)
        {
            break;
        }

        cvShowImage("vedio",frame);
    }
    cvReleaseImage(&frame);
    cvDestroyAllWindows();
    return 0;
}
    

 

录像


 

 

// ex1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <opencv2\opencv.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;
}

 

posted @ 2013-11-22 22:54  强子~Developer  阅读(283)  评论(0编辑  收藏  举报