OpenCV3 读取摄像头并保存图像

本文介绍了一个使用C++和OpenCV实现的简单程序,该程序通过摄像头捕获图像,并在用户按下空格键时保存图像。程序使用了视频捕获、图像显示和图像写入等功能,展示了如何在指定目录下按顺序保存图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <io.h>
#include
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;

/* 函数说明 将int类型的参数追加到字符类型
输入:
@param Location 为文件所在的位置
@param num 为文件的命名(以字符命名)
@param EndLocationType 为文件的后缀
结果:
@param FilesName 目录文件夹下所有该类型的文件存入【目录 + 文件名 + 文件类型】
*/
string FileLocation(string Location, int num, string EndLocationType)
{
string imageFileName;
std::stringstream StrStm1;
StrStm1 << num + 1;
StrStm1 >> imageFileName;
imageFileName += EndLocationType;
return Location + imageFileName;
}

//程序说明:1.按下ESC程序退出,2.按下空格键截取图像
int main()
{
Mat srcImage;
char c;
int temp=0;//计数器
VideoCapture cam(0);
if (!cam.isOpened()) exit(0);
namedWindow("【摄像头】");
while (true) {
cam >> srcImage;
imshow("【摄像头】", srcImage);
c = waitKey(30);
if (c == ’ ')
{
imwrite(FileLocation(“e:\hello\”,temp,".jpg"),srcImage);
temp++;
}
if (c == 27)
break;
}
return 0;
}

最终的效果图

在C++中使用OpenCV(Open Source Computer Vision Library)读取摄像头捕获手势图像通常涉及以下几个步骤: 1. **安装依赖**:首先确保你已经安装了OpenCV库以及CMake等构建工具。 2. **包含头文件**:在C++程序中添加必要的OpenCV头文件,例如`#include <opencv2/opencv.hpp>` 和 `#include <opencv2/highgui/highgui.hpp>`。 3. **初始化摄像头**:使用`cv::VideoCapture`对象打开摄像头,比如通过`cv::VideoCapture cap(0)`,这里0表示默认摄像头。 4. **设置相机参数**:有时候可能需要调整帧率、分辨率等,可以调用`cap.set()`函数。 5. **循环读取和处理图像**: - 使用`cap.read()`获取一帧图像,如果成功则返回true,否则返回false。 - 对图像数据进行预处理,例如转换到灰度、二值化等,以便识别手势。 - 应用手势检测算法,如模板匹配、轮廓分析等。 6. **保存图像**:当识别出手势后,你可以选择将当前帧保存起来,例如`cv::imwrite("hand_gesture.jpg", frame)`,其中`frame`是处理后的图像。 7. **释放资源**:最后记得关闭摄像头清理资源,如`cap.release(); cv::destroyAllWindows();`. 这是一个简单的框架,实际应用中可能还需要更复杂的机器学习模型来识别手势。以下是一个简化的示例代码片段: ```cpp #include <opencv2/opencv.hpp> int main() { cv::VideoCapture cap(0); if (!cap.isOpened()) { std::cerr << "Error opening camera" << std::endl; return -1; } cv::Mat frame, grayFrame; while (true) { cap >> frame; if (frame.empty()) break; // 没有新帧,退出循环 cv::cvtColor(frame, grayFrame, cv::COLOR_BGR2GRAY); // 转换为灰度 // ... 进行手势检测算法... cv::imwrite("current_frame.jpg", frame); // 保存图像 // 等待一段时间再抓取下一帧 cv::waitKey(30); } cap.release(); cv::destroyAllWindows(); return 0; }
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值