opencv进行视频读取和调用摄像头以及对采集到的图像进行闭环处理_libtorch和opencv读取一段视频并进行处理

capture>>farme;
显示每一帧
imshow(“命名”,frame);摄像头采集到的图像显示
控制帧数
waitKey(delay);delay是控制图像显示的帧数
摄像头在开始的时候一直是处于调用状态就是不显示图像,这个可能是系统问题,经过查阅资料表明是dll文件没有粘贴到system文件中;
所对应的程序为:
#include<opencv2\opencv.hpp>
#include<opencv2\video\video.hpp>
using namespace cv;
int main()
{
VideoCapture capture(0);
<//capture.open>(0);
while(1)
{
Mat frame;
capture>>frame;
imshow(“电脑的摄像头采集”,frame);
waitKey(30);
}
return 2;
}
在Opencv中有一个VideoCapture类,来对视频显示以及调用摄像头。
VideoCapture是新增加的一个类文件对应之前CvCapture的一个结构体,VideoCapture也相当于是一个结构体,提供了从摄像机或视频文件捕获视频的C++接口,作用是从视频文件或者从摄像头捕获视屏并显示出来
1.对于结构体的调用有两种一种是常规的:
先实例化再初始化
1.VideoCapture capture;
定义结构体
2.capture.open(“视频文件”);
调用结构体中的枚举
2.另一种是一针见血的:
在实例化的同时在初始化
3.VideoCapture capture(“视频文件”);
第一种的简单理解是: int a;
a=1;
第二种的简单理解是: int a=1;
3.视屏读入到VideoCapture类中,紧接着一个循环将每一帧显示出来,利用循环来显示每一帧图像,
while(1){

               Mat frame;  定义一个Mat变量,用于存储每一帧图像循环进行显示
               capture>>frame;读取当前帧,把视频分成若干帧,起读取作用
               imshow("文件名",frame);  把每一帧图像显示出来
               waitKey(30);   把每一帧图像以30ms的速度连续起来成为视屏;                   

}
所依程序为:读取视频文件
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture;
capture.open(“e336ac53b560a9537e40e7bfac210f85.mp4”);
while(1)
{
Mat frame;
capture>>frame;
if(frame.empty())
{
break;
}
imshow(“快播”,frame);
waitKey(10);
}
return 0;
}

对摄像头采集到的图像进行图像处理:简言之就是机器视觉加图像处理了具体的实现过程有如下代码来做的:
1.调用opencv的头文件;
2.以cv来对程序空间进行命名处理
3.进入主函数
1.调用摄像头
2.定义存储图像的各种变量
3.利用循环来显示摄像头采集的每一帧图像,对每一帧图像进行灰度变换,灰度变换之后进行均值滤波对图像做模糊处理,最后利用Canny算子提取图像的边缘,等待按键的按下,控制图像采集的帧数。和摄像头采集图像的区别就是采集到图像之后对图像进行了相关计算
程序如下:
#include <opencv2/video/video.hpp>
using namespace cv;
int main()
{
VideoCapture capture(0);
<//capture.open>(0);
Mat edge;
while(1)
{
Mat frame;
capture>>frame;
cvtColor(frame,edge,CV_BGR2GRAY);
blur(edge,edge,Size(3,3));
Canny(edge,edge,0,30,3);
imshow(“边缘提取的图像”,edge);
//if(waitKey(30)>=0) break;
waitKey(30);
}
return 1;
}

OpenCV中,你可以使用`cv2.VideoCapture()`函数来读取摄像头捕捉的实时视频流,并通过`cv2.VideoWriter()`函数将其保存到文件。下面是一个简单的示例函数,展示了如何实现这个功能: ```python import cv2 def capture_and_save_video(camera_index=0, output_filename='output.mp4', fps=30): # 创建VideoCapture对象,传入相机设备索引 cap = cv2.VideoCapture(camera_index) # 检查是否成功打开摄像头 if not cap.isOpened(): print(f"无法打开摄像头 {camera_index}") return # 设置帧率 cap.set(cv2.CAP_PROP_FPS, fps) # 创建VideoWriter对象,传入输出文件名、编码器(默认为MPEG4)、帧大小(从摄像头获取),以及帧率 fourcc = cv2.VideoWriter_fourcc(*'mp4v') # 或者 'XVID' out = cv2.VideoWriter(output_filename, fourcc, fps, (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))) try: while True: # 读取一帧 ret, frame = cap.read() # 如果读取成功,处理并写入帧 if ret: processed_frame = process_frame(frame) # 这里替换为你的视频处理代码 out.write(processed_frame) else: break # 当达到文件结尾或者读取失败时退出循环 # 输出完成信息 print(f"视频已成功保存至 {output_filename}") finally: # 关闭文件和摄像头资源 cap.release() out.release() # 自定义处理每一帧的函数(这里仅做简单展示) def process_frame(frame): gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) return gray # 调用函数 capture_and_save_video() ``` 在这个例子中,`process_frame(frame)`是你自定义的函数,可以对每一帧进行滤波、裁剪、增强等各种操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值