图片概览
KS2A242摄像头
摄像头摆放方式
遇到的问题
在我刚开始驱动这个摄像头的时候的python程序长这样
self.cap0 = MyThreadCapture(0, CAPTURE_FRAME_WIDTH, CAPTURE_FRAME_HEIGHT)
self.cap1 = MyThreadCapture(1, CAPTURE_FRAME_WIDTH, CAPTURE_FRAME_HEIGHT)
if self.cap0.is_opened() is False:
self.cap0 = MyThreadCapture(0, CAPTURE_FRAME_WIDTH, CAPTURE_FRAME_HEIGHT)
if self.cap1.is_opened() is False:
self.cap1 = MyThreadCapture(1, CAPTURE_FRAME_WIDTH, CAPTURE_FRAME_HEIGHT)
self.cap0.setDaemon(True)
self.cap0.start()
self.cap1.setDaemon(True)
self.cap1.start()
但是python解释器报了错误。
错误截图
摄像头0的初始化是正常的,而摄像头1的初始化出现了问题,这个语句就是告诉我们,程序需要根据index 1去找摄像头1,但是找不到,为什么呢?开始我也是百思不得其解,后来经过仔细分析,终于解决了问题。
解决方法
首先我们用ls /dev/video*
命令去查找接入树莓派的设备,通过插拔摄像头0和摄像头1的USB接口观察当前接入树莓派的设备
摄像头0,1都插上
只插了摄像头0
一个摄像头都没插
聪明的大家肯定已经发现了其中的规律,摄像头0对应的是/dev/video0
和/dev/video1
这2个设备,摄像头1对应的是/dev/video2
和/dev/video3
这2个设备,这说明一个KS2A242摄像头对应了2个设备,因此摄像头1的初始化时候的设备参数不应该是“1”,而应该是“2”,因此我将我的初始化程序修改成了如下:
while(1):
self.cap0 = MyThreadCapture(0, CAPTURE_FRAME_WIDTH, CAPTURE_FRAME_HEIGHT)
if(self.cap0.is_opened()):
self.cap0.setDaemon(True)
self.cap0.start()
break
while(1):
self.cap1 = MyThreadCapture(2, CAPTURE_FRAME_WIDTH, CAPTURE_FRAME_HEIGHT)
if(self.cap1.is_opened()):
self.cap1.setDaemon(True)
self.cap1.start()
break
最终运行该python脚本,问题解决!
思考
其实接入单个外设之后树莓派的挂载设备数可能是多个的,因此我们需要根据实际接入的设备数量去操作对应的外设,网上的资源很多,查找的时候做为参考即可,更多的还是需要自己的思考。

评论(0)
您还未登录,请登录后发表或查看评论