本章内容
1.摄像头属性获取
2.摄像头属性更改
3.保存摄像头获取的图像为视频
1. 摄像头属性获取
输出结果:
2. 摄像头属性更改
输出结果:
3.保存摄像头获取的图像为视频
输出结果:
源码:
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/xfeatures2d.hpp>int main(int argc, char *argv[])
{
/* 本章内容
1.摄像头属性获取
2.摄像头属性更改
3.保存摄像头获取的图像为视频*/
cv::VideoCapture vCap;
vCap.open(0); // 打开摄像头 ,cv::CAP_V4L
if(!vCap.isOpened()){
std::cout << "摄像头打开失败" << std::endl;
return -1;
}
cv::Mat frame;// 1. 获取摄像头的属性
std::cout << "摄像头宽度:" << vCap.get(cv::CAP_PROP_FRAME_WIDTH) << std::endl;
std::cout << "摄像头高度:" << vCap.get(cv::CAP_PROP_FRAME_HEIGHT) << std::endl;
std::cout << "帧数目:" << vCap.get(cv::CAP_PROP_FPS) << std::endl;
std::cout << "亮度:" << vCap.get(cv::CAP_PROP_BITRATE) << std::endl;
std::cout << "对比度:" << vCap.get(cv::CAP_PROP_CONTRAST) << std::endl;
std::cout << "饱和度:" << vCap.get(cv::CAP_PROP_SATURATION) << std::endl;
std::cout << "色调:" << vCap.get(cv::CAP_PROP_HUE) << std::endl;
std::cout << "普光:" << vCap.get(cv::CAP_PROP_EXPOSURE) << std::endl;// 2.设置摄像头属性
vCap.set(cv::CAP_PROP_FRAME_WIDTH, 320);
vCap.set(cv::CAP_PROP_FRAME_HEIGHT, 240);
vCap.set(cv::CAP_PROP_SATURATION, 50);// 获取摄像头的属性
std::cout << "属性设置后" << std::endl;
std::cout << "摄像头宽度:" << vCap.get(cv::CAP_PROP_FRAME_WIDTH) << std::endl;
std::cout << "摄像头高度:" << vCap.get(cv::CAP_PROP_FRAME_HEIGHT) << std::endl;
std::cout << "帧数目:" << vCap.get(cv::CAP_PROP_FPS) << std::endl;
std::cout << "亮度:" << vCap.get(cv::CAP_PROP_BITRATE) << std::endl;
std::cout << "对比度:" << vCap.get(cv::CAP_PROP_CONTRAST) << std::endl;
std::cout << "饱和度:" << vCap.get(cv::CAP_PROP_SATURATION) << std::endl;
std::cout << "色调:" << vCap.get(cv::CAP_PROP_HUE) << std::endl;
std::cout << "普光:" << vCap.get(cv::CAP_PROP_EXPOSURE) << std::endl;bool ret = vCap.read(frame);
cv::imshow("cap", frame);//3.保存摄像头获取的图像为视频
cv::VideoWriter vWriter;
cv::String vFile = "/home/wang/dev/Image/myCap.avi";
int codec = cv::VideoWriter::fourcc('D', 'I', 'V', 'X');
/* apie接口:CV_WRAP bool open(const String& filename, int fourcc, double fps,
Size frameSize, bool isColor = true);
*/
vWriter.open(vFile,codec,10,frame.size());
int key;
while(1){key = cv::waitKey(100);
if(('q'==key)|('Q'==key)) break;ret = vCap.read(frame);
if(!ret) continue;
// cv::flip(frame,frame,1);
vWriter.write(frame); //写视频帧
cv::imshow("cap", frame);
}vCap.release(); // 释放摄像头,让出资源
vWriter.release();
std::cout << "按任意按键退出程序" << std::endl;
cv::waitKey(0);return 1;
}