用c语言opencv打开摄像头
时间: 2023-12-31 09:05:13 浏览: 129
可以使用OpenCV库中的cvCaptureFromCAM函数来打开摄像头,如下所示:
```
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
namedWindow("Camera",1);
while(1)
{
Mat frame;
cap >> frame; // get a new frame from camera
imshow("Camera", frame);
if(waitKey(30) >= 0) break;
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}
```
相关问题
c语言opencv中摄像头视频采集并保存
下面是一个简单的例子,演示如何使用OpenCV在C语言中捕获摄像头视频并将其保存为AVI文件。
首先,需要包含OpenCV的头文件和标准C库头文件:
```c
#include <opencv2/opencv.hpp>
#include <stdio.h>
```
然后,定义一些常量和变量,例如视频宽度、高度和帧率:
```c
#define WIDTH 640
#define HEIGHT 480
#define FPS 30
int main() {
// 创建视频捕获对象
cv::VideoCapture cap(0);
if (!cap.isOpened()) {
fprintf(stderr, "Failed to open camera\n");
return 1;
}
// 设置视频捕获参数
cap.set(cv::CAP_PROP_FRAME_WIDTH, WIDTH);
cap.set(cv::CAP_PROP_FRAME_HEIGHT, HEIGHT);
cap.set(cv::CAP_PROP_FPS, FPS);
// 创建视频编码器
cv::VideoWriter writer("output.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), FPS, cv::Size(WIDTH, HEIGHT));
if (!writer.isOpened()) {
fprintf(stderr, "Failed to create video writer\n");
return 1;
}
// 捕获视频并保存
cv::Mat frame;
while (true) {
// 从摄像头读取一帧
cap.read(frame);
if (frame.empty()) {
fprintf(stderr, "Failed to read frame\n");
break;
}
// 显示当前帧
cv::imshow("frame", frame);
// 将当前帧写入视频文件
writer.write(frame);
// 按下ESC键退出
if (cv::waitKey(1) == 27) {
break;
}
}
// 释放资源
cap.release();
writer.release();
cv::destroyAllWindows();
return 0;
}
```
在这个例子中,首先创建了一个名为“cap”的视频捕获对象,并使用“cap.isOpened()”函数检查是否成功打开了摄像头。然后,使用“cap.set()”函数设置视频捕获的宽度、高度和帧率。
接下来,创建了一个名为“writer”的视频编码器对象,并使用“writer.isOpened()”函数检查是否成功创建了输出视频文件。在主循环中,使用“cap.read()”函数从摄像头读取一帧,并使用“cv::imshow()”函数显示当前帧。然后,将当前帧写入输出视频文件中,使用“cv::waitKey()”函数等待用户按下ESC键退出循环。
最后,释放了所有资源,并返回0表示程序正常结束。
用c语言编写一个opencv打开摄像头函数
以下是一个使用 C 语言和 OpenCV 库打开摄像头的示例代码:
```c
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
int main(int argc, char** argv) {
cv::VideoCapture cap(0); // 打开默认的摄像头
if (!cap.isOpened()) { // 检测摄像头是否成功打开
return -1;
}
cv::Mat frame;
while (true) {
cap >> frame; // 读取新帧
if (frame.empty()) { // 检测帧是否为空
break;
}
cv::imshow("Camera", frame); // 显示帧
if (cv::waitKey(30) >= 0) { // 等待 30ms 并检测按键
break;
}
}
return 0;
}
```
这个例子使用 `cv::VideoCapture` 类从默认的摄像头读取视频帧,并在循环中显示每一帧。如果用户按下任意键或关闭窗口,程序将退出循环并关闭摄像头。
阅读全文