Opencv 学习笔记_准备工作和入门

由于专业方向,最近开始学习opencv,打算以《学习opencv》一书为纲,一周学习一章至两章,特此记录。
版本信息 ubuntu 14.04 + QT 5.7.1 +opencv3.1

加载图像并显示

QT中貌似不能在CMakeLists.txt自动添加opencv的链接指令,所以我们手动添加一下:

cmake_minimum_required(VERSION 2.8)

project(readAImage)
add_executable(${PROJECT_NAME} "main.cpp")


# 寻找OpenCV库
find_package( OpenCV 3 REQUIRED )
# 添加头文件
include_directories( ${OpenCV_INCLUDE_DIRS} )

# 链接OpenCV库
target_link_libraries( readAImage ${OpenCV_LIBS} )

下面是主程序:

#include <iostream>
// *暂时理解highgui是一个包含诸多与用户交互的窗口类(GUI)的头文件.
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main(int argc, char *argv[])
{
    Mat image = imread(argv[1],-1);//使用imread函数把参数读入到一个Mat对象中,-1是一个异常值
    if(image.empty()) return -1;
    namedWindow("ImageWindow",cv::WINDOW_AUTOSIZE);//定义窗口类对象
    imshow("ImageWindow",image);在窗口中显示图片对象
    waitKey(0);
    destroyWindow("ImageWindow");//销毁窗口
    return 0;
}

加载一个视频文件

程序思路是:

  • 创建一个窗口用来显示视频 namedWindow (事实上是显示捕捉到的视频帧)

  • 创建一个视频捕捉对象 Videocap,并用他打开视频文件

  • 使用一个循环不断输出cap对象中的帧(frame)


int main(int argc, char *argv[])
{
    cv::namedWindow("Example3",cv::WINDOW_AUTOSIZE);
    //creat a video class using VideoCapture
    cv::VideoCapture cap;
    cap.open(string(argv[1]));

    cv::Mat frame;
    for(;;){
        cap >> frame;//将VideoCapture类对象cap中的帧不断输出
        if (frame.empty()) break;//如果未读出,则推出循环
        cv::imshow("Example3",frame);
        if(cv::waitKey(33) >= 0) break;//在frame与frame之间会间隔33毫秒,如果在这期间没有中断操作,则cap继续捕捉桢数
    }
    return 0;
}
  • 关于waitKey函数

waitKey函数的会返回一个整数值,这个值是用户输入的键盘值的ascii码,通常用来处理在一个循环中,如果用户键入一个特定值,便引发特定操作.因此,if(cv::waitKey(33) >= 0) break;表示如果用户键入了任何一个值,则引发break.

加入一个移动栏来控制视频播放进度

转载于:https://www.cnblogs.com/WaterZen/p/7672679.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值