C# 笔记本内置摄像头视频播放和存储

软件环境配置:

系统环境:WIN10

开发环境:VS2017

opencv:opencv3.4.0

本实例的作用:

  1. 读取摄像头或者本地视频数据进行播放

  2. 写入视频数据

  3. 读取图片在子窗口显示、resize等

  4. void playVideoFromCam(){  //从摄像头读入视频    VideoCapture capture(0);  //0笔记本内置摄像头,1调用usb摄像头  while (1)  {        Mat frame;                //定义一个Mat变量,用于存储每一帧的图像        capture >> frame;            //读取当前帧            resize(frame, frame, Size(360, 240));  //改变图像大小        cvtColor(frame, frame, CV_BGR2GRAY);  //转为灰度图    imshow("aa", frame);        waitKey(30);              //延时30ms    }  }

code:

//#include<opencv2\core\core.hpp>
//#include<opencv2\highgui\highgui.hpp>


#include <opencv2\opencv.hpp>  
#include "iostream"  
using namespace cv;


//void filePlayVideo();
void videoReadWriter();
int main(){  
  //filePlayVideo();
  videoReadWriter();
  system("pause");
  return 0;
}


void playVideoFromCam()
{
  //从摄像头读入视频  
  VideoCapture capture(0);  //0笔记本内置摄像头,1调用usb摄像头
  while (1)  {    
    Mat frame;                //定义一个Mat变量,用于存储每一帧的图像    
    capture >> frame;            //读取当前帧        
    resize(frame, frame, Size(360, 240));  //改变图像大小    
    cvtColor(frame, frame, CV_BGR2GRAY);  //转为灰度图
    imshow("aa", frame);    
    waitKey(30);              //延时30ms  
  }  
}
void imageShow()
{
  Mat img = imread("Camera20200506134321196.jpg");
  namedWindow("游戏原画");
  resize(img, img, Size(360, 240));
  imshow("游戏原画", img);
  waitKey(6000);
}
void filePlayVideo()
{
  /***********************************方法1*************************************/
  VideoCapture capture;
  Mat frame;
  frame = capture.open("CAM2202002221459264482.wmv"); //capture.open()的参数为0时为读取摄像头:frame= capture.open(0);
  if (!capture.isOpened())
  {
    printf("can not open ...\n");
  }
  namedWindow("output", CV_WINDOW_AUTOSIZE);


  while (capture.read(frame))
  {
    imshow("output", frame);
    waitKey(40);
  }
  capture.release();


}


//通过摄像头获取视频,然后通过capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT)获取当前帧的宽度和高度,
//创建一个VideoWriter类对象writer进行视频的写入。
void videoWriter()
{
  VideoCapture capture;
  capture.open(0);
  if (!capture.isOpened())
  {
    printf("can not open ...\n");
  }
  Size size = Size(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT));
  VideoWriter writer;
  writer.open("E:/image/a2.avi", CV_FOURCC('M', 'J', 'P', 'G'), 10, size, true);


  Mat frame, gray;
  namedWindow("output", CV_WINDOW_AUTOSIZE);


  while (capture.read(frame))
  {
    //转换为黑白图像
    cvtColor(frame, gray, COLOR_BGR2GRAY);
    //二值化处理 
    threshold(gray, gray, 0, 255, THRESH_BINARY | THRESH_OTSU);
    cvtColor(gray, gray, COLOR_GRAY2BGR);
    imshow("output", gray);
    writer.write(gray);
    waitKey(10);
  }
  waitKey(0);
  capture.release();
}


//從視頻讀取視頻后再寫入指定的文件
void videoReadWriter()
{
  VideoCapture capture;
  Mat frame, gray;
  frame = capture.open("CAM2202002221459264482.wmv"); //capture.open()的参数为0时为读取摄像头:frame= capture.open(0);
  if (!capture.isOpened())
  {
    printf("can not open ...\n");
  }
  namedWindow("output", CV_WINDOW_AUTOSIZE);


  Size size = Size(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT));
  VideoWriter writer;
  writer.open("a1.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25, size, true);


  while (capture.read(frame))
  {
    //转换为黑白图像
    cvtColor(frame, gray, COLOR_BGR2GRAY);
    //二值化处理 
    threshold(gray, gray, 0, 255, THRESH_BINARY | THRESH_OTSU);
    cvtColor(gray, gray, COLOR_GRAY2BGR);
    imshow("output", gray);
    writer.write(gray);
    waitKey(40);
  }
  capture.release();
}

0262a27d3cab44c8ee89bd2a1ecd665e.png

根目錄:

b7004ce661814cb37c218767ad7d81a6.png

a1.avi

b27c7d8bb0ca4dfcdccef7b2c9bbb862.png

------------------------------------------------------------------------------

喜欢的朋友可以多多点击“在看”,让更多好友加入我们的群里,一起共同长进!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zls365365

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值