OpenCV保存USB摄像头视频流,附C++和Python源代码_ubuntu usb 摄像头 c++(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
img

正文

PC端摄像头
Win10或者Ubuntu400万像素USB模拟摄像头

USB摄像头是采用USB接口的安防摄像头,即插即用,傻瓜式操作,无需采集卡,无需电源,支持笔记本电脑。与传统的模拟摄像头相比成本更低,而且模数信号自动转换。方便实用,操作简单。关于相机的具体参数,还有数字/模拟信号,以及MPEG编解码,感兴趣的同学可以再查阅资料。

首先笔记本一般都自带摄像头,所以插入USB摄像头后,识别设备编号为1,如果没有自带摄像头,capture()的参数为0。在Win10系统下录制视频分辨率使用640x480,在Ubuntu系统下分辨率采用相机的分辨率

C++版本代码

首先是定义视频文件的保存路径,然后创建并初始化摄像头对象。这里VideoCapture capture(0);也可以写成VideoCapture capture; capture.open(0);。然后创建写视频对象,设置保存视频信息,这里尤其注分辨率。然后就是输入流读入帧,再用输出流写到文件中。imshow显示每一帧图像,延迟10ms进入下一循环进行显示。最后退出程序时候将所有创建的对象和窗口进行销毁,防止内存泄漏。完整代码如下:

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

//视频文件保存位置
string path = "/home/dzh/video.mp4";

//打开摄像头
VideoCapture capture(0);

//写视频对象 
VideoWriter outputVideo;

//设置保存视频信息(路径,编码格式, 帧率, 分辨率)
outputVideo.open(path, CV\_FOURCC('M','P','4','V'), 30, Size(640, 480));

// 如果视频没有打开成功
if (!outputVideo.isOpened()) {
    cout << "fail to open!" << endl;
}
// 定义读取的帧
Mat frame;
// 定义想保存的视频帧数
int count = 0;
while(true) {
    //读取当前帧
    capture >> frame;
    count++;
    //显示当前视频帧
    imshow("output", frame);
    //写入当前帧
    outputVideo << frame;
    //任意键退出
    if ((waitKey(10) > 0) break;
    //或者录制600帧自动退出
    if (count >= 600) break;
}
// 释放写视频资源
capture.release();
outputVideo.release();
// 销毁所有窗口
destoryAllWindows();

Python版本代码

Python代码的实现流程和C++相同,只是语法不同而已,这里扩展下编码格式的内容。

cv2.VideoWriter\_fourcc('X', 'V', 'I', 'D') //该参数是MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小

cv2.VideoWriter\_fourcc('F', 'L', 'V', '1') //该参数是Flash视频,文件名后缀为.flv

最后

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
存中…(img-yA1X0ChG-1713330902517)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Python中,你可以使用OpenCV库来处理USB摄像头并实时检测特征匹配。以下是一个简单的步骤示例: 首先,确保你已经安装了`opencv-python`库。如果没有,可以使用pip安装: ```bash pip install opencv-python opencv-python-headless ``` 然后,编写Python代码: ```python import cv2 import numpy as np # 初始化摄像头 cap = cv2.VideoCapture(0) # 使用默认的USB摄像头,如果你有多个摄像头,可以改为1、2等 # 加载预设的SIFT/SURF特征检测器和匹配器 sift = cv2.xfeatures2d.SIFT_create() # SIFT (Scale-Invariant Feature Transform) bf = cv2.BFMatcher() # Brute Force Matcher while True: # 读取一帧 ret, frame = cap.read() if not ret: # 检查是否成功读取到帧 break # 转换为灰度图像以便于特征检测 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 检测关键点和描述符 kp1, des1 = sift.detectAndCompute(gray, None) # 如果上一次帧存在,则找到特征匹配 if 'kp2' in locals() and 'des2' in locals(): kp2, des2 = sift.detectAndCompute(gray, None) # 当前帧的关键点和描述符 matches = bf.knnMatch(des1, des2, k=2) # 找到最近邻匹配 good_matches = [] # 存储高质量的匹配 for m, n in matches: if m.distance < 0.7 * n.distance: # 马氏距离阈值(通常小于0.7) good_matches.append([m]) else: kp2, des2 = [], [] # 第一次运行或之前帧丢失时初始化 # 显示匹配结果(如果有的话) if len(good_matches) > 0: img3 = cv2.drawMatchesKnn(frame, kp1, frame, kp2, good_matches, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS) cv2.imshow('Feature Matching', img3) # 按 'q' 键退出 key = cv2.waitKey(1) if key == ord('q'): break # 关闭摄像头释放资源 cap.release() cv2.destroyAllWindows() ``` 这个代码会启动摄像头,实时检测并匹配特征,然后在窗口显示匹配结果。当你按下'q'键时,程序会停止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值