03opencv---读取图像视频

一、读取图像

Mat img = imread("1.jpg"); // 读取图像并返回一个Mat变量
namedWindow("img_title", WINDOW_AUTOSIZE); // 新建一个标题为img_title的窗口,根据内容自适应大小
imshow("img_title", img); // 将img显示在标题为img_title的窗口中,也可以直接显示图片,不用建窗口
waitKey(0); // 等待任意按键关闭图像

二、读取视频

// 打开方式1,直接通过构造函数
VideoCapture capture("1.mp4");
// 打开方式2
VideoCapture capture;  // 先创建一个捕获对象,然后通过成员函数open()来设定打开的信息
capture.open("1.mp4");

  如果打开成功,cv::VideoCapture的成员函数isOpened()将会返回true,可以进行判断

if (!capture.isOpened()) { //如果打开成功,我们将可以开始读取视频的帧,并且cv::VideoCapture的成员函数isOpened()将会返回true
    printf("could not read this video file...\n");
    return -1;
    }
//显示视频
Mat frame;
namedWindow("camera-demo", WINDOW_AUTOSIZE); //新建一个标题为camera-demo的窗口,根据内容自适应大小
while (capture.read(frame)) {
    imshow("camera-demo", frame); // 显示图像
    //writer.write(frame); //使用writer写入图像
    char c = waitKey(50);
    if (c == 27) {
        break;
    }
}

三、读取视频帧到Mat矩阵中

// 读取到Mat矩阵中
Mat frame;
capture.read(frame); //或者 capture>>frame;
namedWindow("img-demo", WINDOW_AUTOSIZE); //// 新建一个标题为camera-demo的窗口,根据内容自适应大小
imshow("img-demo", frame); //显示

 四、写入视频 

VideoWriter  video_writer;
video_writer.open(const string& filename, int fourcc, double fps,Size frameSize, bool isColor=true); // fourcc:表示压缩帧的codec,一般用CV_FOURCC(‘M’,‘J’,‘P’,‘G’) = motion-jpeg codec;
例:
Size S = Size((int)capture.get(CAP_PROP_FRAME_WIDTH),(int)capture.get(CAP_PROP_FRAME_HEIGHT));//宽高
int fps = capture.get(CAP_PROP_FPS);//帧率
VideoWriter writer("C:/Users/Dell/Desktop/picture/test.mp4", CAP_OPENCV_MJPEG, fps, S, true);

writer.write(frame); //后面使用write写入图像

 

 五、OpenCV VideoCapture.get()参数详解

  cv2.VideoCapture.get(3) 在视频流的帧的宽度
  cv2.VideoCapture.get(4) 在视频流的帧的高度
  cv2.VideoCapture.get(5) 帧速率
  cv2.VideoCapture.get(6) 编解码的4字-字符代码
  cv2.VideoCapture.get(7) 视频文件中的帧数

 

posted @ 2022-08-25 17:14  cheng4632  阅读(104)  评论(0编辑  收藏  举报