图片概览

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脚本,问题解决!
在这里插入图片描述

思考

其实接入单个外设之后树莓派的挂载设备数可能是多个的,因此我们需要根据实际接入的设备数量去操作对应的外设,网上的资源很多,查找的时候做为参考即可,更多的还是需要自己的思考


(づ ̄3 ̄)づ╭❤~一键三连,这次一定(๑•̀ㅂ•́)و✧