学习OpenCV(1)

本文是OpenCV学习系列的第一篇,主要介绍了OpenCV的基本概念,及其在图像处理和计算机视觉领域的应用。同时,详细讲解了如何在不同操作系统上安装和配置OpenCV环境,包括Windows、Mac OS和Linux。对于初学者,本文提供了清晰的步骤指导,帮助快速搭建开发环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面一段时间看了一下OpenCV3编程入门,学习了一些基础知识。今天开始看学习OpenCV这本书,做了一个播放视频的小界面,记录一下。
在OpenCv3中播放视频要使用一个类:VideoCapture,比如:
VideoCapture capture("1.avi")。如果要使用摄像头则是VideoCapture(0)。
然后定义一个Mat对象:Mat frame。
使用capture >> frame,得到一帧图像。
那么正常的播放就是:
while(1)
{
capture >> frame;
imshow("1.avi",frame);
}
这功能还是过于简单,所以增加了按键功能,按下q键就退出,按下空格就暂停。
接下来增加滑动条,通过滑动条可以控制视频的播放。
首先,要得到视频的长度,即总的帧数。使用 VideoCapture::get(),原型为:  CV_WRAP virtual double get(int propId) const; 
propId参数填一个枚举,这里应该填入:CV_CAP_PROP_FRAME_COUNT。
接下来通过滑动滑动条可以跳跃播放,就要设置视频的当前帧,这里就要使用VideoCapture::set()。函数原型为:CV_WRAP virtual bool set(int propId, double value);propId应该使用CV_CAP_PROP_POS_FRAMES。这样,就可以通过滑动条控制视频了。
全部代码:
#include "stdafx.h"
#include "core.hpp"
#include "cv.h"
#include "cv.hpp"
#include "highgui.h"
#include "highgui.hpp"
#include "opencv.hpp"
#include <opencv2\opencv.hpp>  

int nNowFrame = 0;
cv::VideoCapture capture;
cv::Mat frame;
void VideoTrackbar(int pos)
{
    capture.set(CV_CAP_PROP_POS_FRAMES, pos);
    cvSetTrackbarPos("video", "1.avi", pos);
    capture >> frame;
    if (!frame.empty())
    imshow("1.avi", frame);
}

int _tmain(int argc, _TCHAR* argv[])
{
    cv::namedWindow("1.avi");
    capture.open("1.avi");
    int count;
    count = capture.get(CV_CAP_PROP_FRAME_COUNT);

    bool bStop = false;

    cvCreateTrackbar("video",
        "1.avi", &nNowFrame, count, VideoTrackbar);

    while (1)
    {
        if(!bStop)
        {
            capture >> frame;
            nNowFrame =  capture.get(CV_CAP_PROP_POS_FRAMES);
            cvSetTrackbarPos("video", "1.avi", nNowFrame);
            if (frame.empty())
            {               
                int nowPos = capture.get(CV_CAP_PROP_FRAME_COUNT);
                if (nowPos >= count)
                {
                    capture.set(CV_CAP_PROP_POS_FRAMES, 0);
                    cvSetTrackbarPos("video", "1.avi", 0);
                    bStop = true;
                }
                else
                    continue;
            }
            else
                cv::imshow("1.avi", frame);

        }
        char key = (char)cv::waitKey(1);
        switch (key)
        {
        case 'q':
            return 0;
            break;  
        case ' ':
            bStop = !bStop;
            break;
        default:
            break;
        }
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值