-
2018-07-03 13:08:37
一个USB HUB连接多个摄像头同时工作问题处理
如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033目录
1.起源
多个(免驱)USB摄像头连同一个USB HUB的同时进行图像处理。
2.问题
一种说法是单个USB控制最大传输理论上为70多MB,打个折扣约50MB的实际速度,而640*480的视频大约需要26MB,所以最多带两个。
多摄像头一定能做,但是如何做网络上公开的经验很少。3.解决思路
实验了一些代码,验证了真的只能同时显示两个摄像头的视频,但是好消息是一个USB HUB上连N个摄像头这些摄像头都是能够获取到视屏。所以,给出以下建议:
假设一个USB HUB上连了A、B、C、D四个摄像头:
- 写个时间轮续,间隔多少秒后停下两个显示另两个。
2.一个USB control 上最多连两个,那就多连几个USB control。(注意:有的电脑有很多的USB口但不见得有多个USB control)。
3.PCI的USB扩展口,值得你拥有。
4.据说高手可以写驱动解决这个问题
注意:
当只接两个摄像头时,也有可能无法正常工作,比如其中一个是高清摄像头,占用带宽很大,所以也无法同时工作。可以尝试降低分辨率等手段降低传输数据大小。
Refrence:
https://blog.csdn.net/machaoyayiyaho/article/details/42053895
https://bbs.csdn.net/topics/392295632觉得文章对你有帮助,可以用微信扫描二维码捐赠给博主,谢谢!
如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033更多相关内容 -
python多进程访问多个摄像头
2020-12-20 19:16:17CAMERA_COUNT=2 #摄像头个数 url="rtsp://admin:12345678@192.168.128.45"#外置摄像头地址及密码 # 不同进程不能共享内存,定义队列进行进程通信 q = Queue() def video_read(id): camera_id = id #使用笔记本自带... -
h5 多个摄像头选择
2018-08-15 17:43:50pc端 html5页面可以选择多个摄像头。也可以用于手机端。 -
python+openCV利用摄像头实现人员活动检测_python多个摄像头
2020-11-20 21:40:30python+openCV利利用用摄摄像像头头实实现现人人员员活活动动检检测测 这篇文章主要为大家详细介绍了python+openCV利用摄像头实现人员活动检测具有一定的参考价值感兴趣的 小伙伴们可以参考一下 文实例为大家分享了... -
Opencv3获取电脑上多个摄像头的名称和编号
2018-07-07 15:18:34这是一个通过C++获取电脑上连接的多个摄像头的名称和编号,方便opencv开发的时候直接通过摄像头编号获取对应摄像头的数据,也方便直播开发获取摄像头名称。 -
opencv 打开多个摄像头
2013-11-30 16:26:22opencv打开多个摄像头的示例,使用的是opencv2.4.6版本,vc2008 -
c#操作多个摄像头
2013-09-27 15:02:18有两种方法实现 分别是AForge和windows api 打开摄像头,关闭摄像头,拍照功能 -
基于Live555的从多个摄像头实时获取H264/265数据并转发的Rtsp服务器
2018-08-10 16:08:14直接从IP摄像头获取数据(H265数据需稍微改动),然后作为服务器转发,支持多个摄像头同时连接。摄像头的地址和用户名密码在代码中更改即可。下载后可留言交流。 -
Python通过cv2读取多个USB摄像头
2020-09-18 17:47:08主要为大家详细介绍了Python通过cv2读取多个USB摄像头,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
H5调用本地摄像头进行照片拍摄、证件采集、可获取多个摄像头列表等
2019-08-08 14:50:10H5调用本地摄像头进行照片拍摄、证件采集如果本地连接有多个摄像头,可获取多个摄像头列表,可选择不同摄像头进行不同类型的照片采集 -
OpenCV图像处理--一个窗口显示多个摄像头
2022-01-11 16:42:05OpenCV图像处理--一个窗口显示多个摄像头【一】原理
1、开启两个摄像头,系统默认从0开始查找,两个摄像头使用0和1就够啦,然后把显示窗口尺寸固定,这里用的是320和240VideoCapture capture1(0); VideoCapture capture2(1);
2、创建一个黑色图片,大小刚好可以容纳两个摄像头窗口,width=640,height=240
Mat frame(240,640,CV_8UC3,Scalar(0,0,0));
3、创建ROI区域
ROIImage1 = frame(Rect(0,0,320,240)); ROIImage2 = frame(Rect(320, 0, 320, 240));
4、创建掩膜
掩膜必须是灰度图,因此先要把图片转化为灰度图
cvtColor(frame1, gray_Image1,CV_RGB2GRAY); cvtColor(frame2, gray_Image2, CV_RGB2GRAY);
然后把图片复制给掩膜
mask1 = gray_Image1;
mask2 = gray_Image2;5、把掩膜复制到ROI区域,frame1为要覆盖的图片,意思就是把frame1复制ROI区域的掩膜上。
frame1.copyTo(ROIImage1, mask1); frame2.copyTo(ROIImage2, mask2);
【二】效果图
【三】源码#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; //【画框】 void Draw_rectangle(Mat img,Point pt1, Point pt2) { rectangle(img, pt1, pt2, Scalar(0, 255, 0), 2, 8, 0); } int main(int argc, char *argv[]) { Mat srcImage,srcImage2,srcImage3,srcImage4; Mat ROIImage1,ROIImage2,ROIImage3,ROIImage4,mask1,mask2,mask3,mask4,gray_Image1, gray_Image2,gray_Image3,gray_Image4; VideoCapture cap(0); VideoCapture cap1("car_input.mp4"); VideoCapture cap2("carMove2.mp4"); VideoCapture cap3("carMove.mp4"); cap.set(CV_CAP_PROP_FRAME_WIDTH, 320); cap.set(CV_CAP_PROP_FRAME_HEIGHT, 240); cap1.set(CV_CAP_PROP_FRAME_WIDTH, 320); cap1.set(CV_CAP_PROP_FRAME_HEIGHT, 240); cap2.set(CV_CAP_PROP_FRAME_WIDTH, 320); cap2.set(CV_CAP_PROP_FRAME_HEIGHT, 240); cap3.set(CV_CAP_PROP_FRAME_WIDTH, 320); cap3.set(CV_CAP_PROP_FRAME_HEIGHT, 240); if (!cap.isOpened()) { cout << "VideoCapture open fail" << endl; return 0; } if (!cap1.isOpened()) { cout << "VideoCapture1 open fail" << endl; return 0; } if (!cap2.isOpened()) { cout << "VideoCapture2 open fail" << endl; return 0; } if (!cap3.isOpened()) { cout << "VideoCapture3 open fail" << endl; return 0; } Mat frame3(480,640,CV_8UC3,Scalar(0,0,0)); char temp_1[20]; char temp_2[20]; char temp_3[20]; char temp_4[20]; while (cap.isOpened()) { cap >> srcImage; cap1 >> srcImage2; cap2 >> srcImage3; cap3 >> srcImage4; resize(srcImage2, srcImage2,Size(320,240)); resize(srcImage3, srcImage3,Size(320,240)); resize(srcImage4, srcImage4,Size(320,240)); Draw_rectangle(srcImage, Point(0,0),Point(srcImage.cols, srcImage.rows)); Draw_rectangle(srcImage2, Point(0, 0), Point(srcImage2.cols, srcImage2.rows)); Draw_rectangle(srcImage3, Point(0, 0), Point(srcImage3.cols, srcImage3.rows)); Draw_rectangle(srcImage4, Point(0, 0), Point(srcImage4.cols, srcImage4.rows)); sprintf(temp_1, "capture1"); putText(srcImage, temp_1, Point(srcImage.cols / 16, srcImage.rows / 10), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(255, 0, 255)); sprintf(temp_2, "capture2"); putText(srcImage2, temp_2, Point(srcImage2.cols / 16, srcImage2.rows / 10), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(255, 0, 255)); sprintf(temp_3, "capture3"); putText(srcImage3, temp_3, Point(srcImage3.cols / 16, srcImage3.rows / 10), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(255, 0, 255)); sprintf(temp_4, "capture4"); putText(srcImage4, temp_4, Point(srcImage4.cols / 16, srcImage4.rows / 10), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(255, 0, 255)); ROIImage1 = frame3(Rect(0,0,320,240)); ROIImage2 = frame3(Rect(320, 0, 320, 240)); ROIImage3 = frame3(Rect(0, 240, 320, 240)); ROIImage4 = frame3(Rect(320, 240, 320, 240)); //imshow("ROIImage1", ROIImage1); //imshow("ROIImage2", ROIImage2); cvtColor(srcImage, gray_Image1,CV_RGB2GRAY); cvtColor(srcImage2, gray_Image2, CV_RGB2GRAY); cvtColor(srcImage3, gray_Image3, CV_RGB2GRAY); cvtColor(srcImage4, gray_Image4, CV_RGB2GRAY); mask1 = gray_Image1; mask2 = gray_Image2; mask3 = gray_Image3; mask4 = gray_Image4; srcImage.copyTo(ROIImage1, mask1); srcImage2.copyTo(ROIImage2, mask2); srcImage3.copyTo(ROIImage3, mask3); srcImage4.copyTo(ROIImage4, mask4); // imshow("ROIImage1", srcImage); // imshow("ROIImage2", srcImage2); // imshow("srcImage3", srcImage3); // imshow("srcImage4", srcImage4); imshow("main", frame3); if (waitKey(25)==27) { break; } } cap.release(); destroyAllWindows(); return 0; }
-
C# 实现多个IP摄像头画面预览以及截图
2019-05-02 21:54:581、C# 多个ip摄像头画面预览以及截图界面 2、winform VS2013 .NET4 Client Profile 3、测试摄像头:海康威视 亲测有效哦,绝对物超所值! 4、需要输入IP地址,端口号,用户名和密码。预览、抓图、客户端录像基本... -
python-opencv 拼接多个摄像头
2019-11-17 16:18:00opencv拼接多个摄像头通过hstack, vstack拼接通过一个大的矩阵显示总结 通过hstack, vstack拼接 代码 import cv2 import numpy as np cap = cv2.VideoCapture(0) cap_t = cv2.VideoCapture(1) while cap.isOpened():...opencv拼接多个摄像头
通过hstack, vstack拼接
代码
import cv2 import numpy as np cap = cv2.VideoCapture(0) cap_t = cv2.VideoCapture(1) while cap.isOpened(): ret, frame = cap.read() ret_t, frame_t = cap_t.read() frame_h = np.hstack((frame, frame_t)) # frame_v = np.vstack((frame, frame_t)) cv2.imshow('title', frame_h) if cv2.waitKey(10) == 113: #点击q的时候退出 break
效果(hstack):
hstack是横向拼接,vstack是纵向拼接
通过一个大的矩阵显示
代码
import cv2 import numpy as np frame_h = np.zeros((480, 1280, 3), dtype=np.uint8) # 创建一个1280*640的矩阵用来显示 cap = cv2.VideoCapture(0) cap_t = cv2.VideoCapture(1) while cap.isOpened(): ret, frame = cap.read() ret_t, frame_t = cap_t.read() frame_h[0:480, 0:640, :] = frame frame_h[0:480, 640:1280, :] = frame_t cv2.imshow('title', frame_h) if cv2.waitKey(10) == 113: break
效果
注意,再创建大的矩阵的使用要填入dtype=np.uint8不然会出现显示白屏或是显示色彩不对的情况
总结
第一种方法适用于摄像头或是图片数量固定的时候,通过hstack和vstack拼接每次仅能两张图片拼接。第二种方法适用于摄像头数量不定的情况,设置好大的显示矩阵后,只需将你想要显示的区域填入内容就可以显示,其他部分会显示黑色。
-
多线程读取+多进程保存多路摄像头图像
2021-01-20 02:51:12(1)利用python多进程程或多线程实时读取远程IP摄像头视频 (2)Pyhon cv2.VideoWriter 保存视频 整合成如下代码,可以对多路网络摄像头图像实时采集并分别保存视频。或者自己改写代码,直接保存每路的实时图像也... -
Android 同时打开多路摄像头
2018-12-29 12:02:51Android 同时打开多路USB摄像头,采用UVC驱动。目前demo内是最多打开六路 -
多个摄像头打开
2019-07-22 09:39:18经常性的图像处理用到一个摄像头就行了,但是有时候也需要用到多个摄像头,这里介绍下如何打开多个摄像头。这里介绍三种打开方式 opencv ,MFC,QT, 其实QT和MFC都是引用opencv的库总体上程序没有太多的变化。。 介绍...经常性的图像处理用到一个摄像头就行了,但是有时候也需要用到多个摄像头,这里介绍下如何打开多个摄像头。这里介绍三种打开方式 opencv ,MFC,QT,
其实QT和MFC都是引用opencv的库总体上程序没有太多的变化。。
介绍下QT打开三个摄像头,,,,,,
VideoCapture cap1;
VideoCapture cap2;
VideoCapture cap3;
Mat frameleft,frameright,framecenture,framelefthsv,framegray;
cap1.open(0);
cap2.open(1);
cap3.open(2);
while(1)
{
cap1.read(frameleft);
cap2.read(frameright);
cap3.read(framecenture);
cvtColor(frameleft,framelefthsv,COLOR_BGR2HSV);
cvtColor(frameright,framegray,COLOR_BGR2GRAY);QImage imgleft=mat2QImage(framelefthsv); QImage imgright=mat2QImage(framegray); QImage imgcen=mat2QImage(framecenture); ui->label->setScaledContents(true); ui->label_2->setScaledContents(true); ui->label_3->setScaledContents(true); ui->label->setPixmap(QPixmap::fromImage(imgleft)); ui->label_2->setPixmap(QPixmap::fromImage(imgright)); ui->label_3->setPixmap(QPixmap::fromImage(imgcen)); waitKey(30);
MFC…
opencv…
好吧,原本想再写个EMGUCV打开多个摄像头的,,突然发现4.0的和3.0的不太一样了,,,以前用的是3.0的。。。要再看看了
-
树莓派控制多个摄像头同时拍照上传服务器并进行图像识别- 方法(一)
2019-10-20 11:11:34(1) 能不能用树莓派同时控制多个摄像头进行拍照 1. 方法(一) 树莓派是一种卡片计算机,拥有很高的运算能力,我们项目做动物监测系统,要求能够传输视频数据,并将视频上传至服务器,当初我的想法是采用推流,将... -
Opencv无法同时连接多个摄像头
2019-05-25 22:27:01我在最近的一次实验中尝试使用opencv同时调用 ...经查阅资料得知是电脑的usb带宽有限,不足以同时支撑多个摄像头。 目前已知可行的方法如下: 1. 不要同时生成多个 VideoCapture 实例。你可以只保留一个,然后每拍完... -
Python OpenCV 多个摄像头拍摄视频拼接显示在一个窗口里
2021-04-01 15:11:21Python OpenCV 多个摄像头拍摄视频拼接显示在一个窗口里 flyfish import cv2 import numpy as np videoLeft = cv2.VideoCapture(0) videoRight = cv2.VideoCapture(1) width = (int(videoLeft.get(cv2.CAP_PROP_... -
opencv启动4个以上摄像头,并实现来回的切换。opencv启动多个摄像头,MFC启动多个摄像头。
2018-11-30 16:40:33我们知道由于USB带宽与摄像头像素的因素,一台电脑通常只能同时启动2个摄像头。 在很多项目中我们需要启动2个以上就带来了麻烦。 可以通过摄像头轮询的方式解决这个问题,随意多少个都可以启动。 效果视频连接:... -
多个摄像头视频图像拼接和应用
2009-07-09 14:45:15论述实时处理由若干个摄像头采集的图像,即利用视频图像边界重叠的部分进行拼接,形成全 景式的视频,然后实时显示拼接后的视频图像 -
基于Live555的从多个摄像头获取数据并转发的Rtsp服务器
2018-07-20 17:16:06直接从IP摄像头获取数据,然后作为服务器转发,支持多个摄像头同时连接。摄像头的地址和用户名密码在代码中更改即可。 -
C#编写的多路海康威视摄像头显示示例
2022-04-07 15:18:59多个按键控制多路摄像头显示关闭 -
C++跟C#获取电脑上连接的多个摄像头名称与编号
2019-04-10 16:35:301、其中C++获取多个摄像头的名称,然后根据名称对应其编号,从而可以使用opencv进行按编号打开特定的摄像头: #include<iostream> #include "strmif.h" #include <initguid.h> #include<vector>... -
[RK3399]多个摄像头
2019-03-26 00:14:35https://blog.csdn.net/kris_fei/article/details/81508302 -
关于onvif 添加辅码流及多个摄像头 协议注意事项
2020-01-06 16:20:10有多少个摄像头则添加多少个source 注意的是每个摄像头可以有多个profiles(至少1个),且这些个profiles的source一致(及表明来源于同一个摄像头) ... -
同时代开多个摄像头并保存avi视频
2012-11-19 14:57:54功能实现同时打开两个摄像头,并保存avi视频文件