使用OpenCV捕获摄像头图像并显示

⌚Time: 2022-11-07 16:53:49

👨‍💻Author: Jack Ge

opencv下载

https://opencv.org/releases

下载windows版本的opencv并且安装

直接设置opencv库的解压目录

解压完成后将opencv bin目录加入系统环境变量path,使系统找到运行时的动态链接库

程序


#include <iostream>

#include <opencv2\opencv.hpp>

 

// 主函数

int main(int argc, char* argv[])

{

    double width  = 0;            

    double height = 0;

    double fps    = 25;

    cv::Mat frame;

    cv::String WIN_NAME = "Camera";

    cv::VideoCapture cap; 

 

    if (!cap.open(0))  // 打开 index = 0 的摄像头

        return -1;

    

    width  = cap.get(CV_CAP_PROP_FRAME_WIDTH);  // 获取摄像头图像的宽

    height = cap.get(CV_CAP_PROP_FRAME_HEIGHT); // 获取摄像头图像的高

 

    std::cout << "widht =" << width  << std::endl;

    std::cout << "heigt =" << height << std::endl;

    std::cout<<"Press Esc to exit"<<std::endl;

 

    cv::namedWindow(WIN_NAME);   // 创建一个名为 Camera 的窗口

 

    // 循环读取摄像头

    for (;;) {      

        cap >> frame;  // 获取摄像头图像

 

        if (frame.empty()) 

            break;

 

        cv::imshow(WIN_NAME, frame); // 显示摄像头图像

 

        if (cv::waitKey(1000/(int)fps) == 27) // 按下键盘的 Esc 退出

            break;

    }

 

    cv::destroyAllWindows();  // 清理资源

    return 0;

}

cvwaitkey理解

首先,在cvWaitKey(k)中,k的单位为毫秒,1000毫秒等于1秒,同时,根据资料的说明,在显示图像的时候,每秒显示27、28帧的时候,我们看到的视频是流畅的。同时采取25帧的话,k=1000/25=40。即,每处理完一帧后,程序会等待40毫秒才会读取下一帧;

显示图像,一般要在cvShowImage()函数后加一句cvWaitKey(),此时程序显示出图像后将暂停,等待接收一个键盘输入;若没有这句话,则显示图像的代码很快就执行过去了,所以要用cvWaitKey()来暂停。

显示视频时,一般用cvWaitKey(delay) delay是延时的ms数。表示显示一帧,然后等delay ms ,再显示下一帧。如果没有cvWaitKey的话, 那么循环里面的每个指令执行时间趋近于0.那么capture可能有10000帧图像, 播放完了, 结果你还没看到画面,就已经黑屏了

编译链接


g++ demo.c -ID:\libs\opencv\include -LD:\libs\opencv\x86\mingw\lib -lopencv_calib3d2412.dll -lopencv_contrib2412.dll -lopencv_core2412.dll -lopencv_features2d2412.dll -lopencv_flann2412.dll -lopencv_gpu2412.dll -lopencv_highgui2412.dll -lopencv_imgproc2412.dll -lopencv_legacy2412.dll -lopencv_ml2412.dll -lopencv_nonfree2412.dll -lopencv_objdetect2412.dll -lopencv_ocl2412.dll -lopencv_photo2412.dll -lopencv_stitching2412.dll -lopencv_superres2412.dll -lopencv_ts2412 -lopencv_video2412.dll -lopencv_videostab2412.dll

其中-I指定opencv的头文件目录,-L指定库文件目录,-l指定链接的库文件,根据opencv的安装位置而改变