【OpenCV学习】使用OpenCV打开摄像头并实现拍照功能

OpenCV中的HighGUI模块可以和摄像头中读取的实时数据流进行交互

这种方法很接近使用cv::VideoCapture从硬盘读取视频的方式(在我的上上一篇博客中有相关代码)

cv::VideoCapture对磁盘上的文件和摄像头是有一致接口的,对于前者,需要给一个读取文件名的路径,对于后者而言,需要给一个相机ID号,如果只有一个摄像头链接,则这个ID号通常为0,当ID值为-1时则代表任意选择一个

代码如下:

// 从摄像头中读取
#include 
#include 
#include 
#include 

int main() {
	cv::namedWindow("暴风影音", cv::WINDOW_AUTOSIZE);

	cv::VideoCapture cap;
	// 读取摄像头
	cap.open(0);
	// 判断摄像头是否打开
	if (!cap.isOpened()) {
		std::cerr << "Could't open capture" << std::endl;
		return -1;
	}
	cv::Mat frame;
	// 接收键盘上的输入
	char keyCode;
	// 保存的图片名称
	std::string imgName = "123.jpg";
	while (1) {
		// 把读取的摄像头传入Mat对象中
		cap >> frame;
		// 判断是否成功
		if (frame.empty()) {
			break;
		}
		// 把每一帧图片表示出来
		cv::imshow("暴风影音", frame);
		// 在30毫秒内等待是否存在键盘输入
		keyCode = cv::waitKey(30);
		if (keyCode == 's') {
			// 把图片保存起来
			cv::imwrite(imgName, frame);
			imgName.at(0)++;
			frame.release();
		} else if (keyCode == 27) {
			break;
		}
	}
	return 0;
}

结果如图:

【OpenCV学习】使用OpenCV打开摄像头并实现拍照功能_第1张图片

如果按s,则可以保存图片

【OpenCV学习】使用OpenCV打开摄像头并实现拍照功能_第2张图片

如果按esc则可以退出 

你可能感兴趣的:(OpenCV学习)