标签:CAPTURE 树莓 self cap cv2 KS2A242 frame FRAME 摄像头
写在前面
之前我已经写过一些树莓派通过python发送命令控制底盘子系统按照预定轨迹行走的博客了,传送门在下面:
- STM32F427IIH6芯片通过DMA+USART(UART)与树莓派进行双工通信
- 购物机器人底盘控制之STM32F427IIH6芯片处理串口数据方案
- 树莓派中Python控制购物机器人完成预定轨迹行走
完成了底盘子系统的运动控制之后,就需要做图像识别了,那么完成图像识别的前提就是拍照,拍照就需要用到摄像头,我们小组选用的摄像头是KS2A242,那么在我驱动2个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()
摄像头的驱动类如下
class MyThreadCapture(threading.Thread):
def __init__(self, capture_source, capture_frame_width, capture_frame_height):
threading.Thread.__init__(self)
self.cap = cv2.VideoCapture(capture_source)
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, capture_frame_width)
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, capture_frame_height)
self.img = None
self.lock = threading.Lock()
self.stop_cap = False
print('cap ' + str(capture_source) + str(self.cap.isOpened()))
def is_opened(self):
return self.cap.isOpened()
def run(self):
# ret, frame = self.cap.read()
while True:
if self.stop_cap is True:
print('cap stop !')
self.cap.release()
break
if self.lock.acquire():
ret, frame = self.cap.read()
if ret is True:
self.img = frame
self.lock.release()
time.sleep(0.01)
def get_img(self):
frame = None
while True:
if self.lock.acquire():
frame = self.img
self.lock.release()
break
return frame
def stopp(self):
self.stop_cap = True
在网上搜索驱动树莓派驱动2个摄像头的结果都是教我们这样写的,于是我也类比着写了一个,稍微特别一点的就是我专门写了一个类来做摄像头的初始化,但是,事情的发展总是不遂人愿的,python解释器报了的错误。
错误截图
这个语句就是告诉我们,需要程序根据index 1去找摄像头1,但是找不到,为什么呢?开始我也是百思不得其解,后来经过仔细分析,终于解决了问题。
解决方法
首先我们用ls /dev/video*
命令去查找接入树莓派的设备,根据插拔摄像头0和摄像头1观察当前接入树莓派的设备
摄像头0,1都插上
只插了摄像头0
一个摄像头都没插
聪明的大家肯定已经发现了其中的规律,摄像头0对应的是/dev/video0
和/dev/video1
这2个设备,摄像头1对应的是/dev/video2
和/dev/video3
这2个设备,
问题解决
标签:CAPTURE,树莓,self,cap,cv2,KS2A242,frame,FRAME,摄像头 来源: https://blog.csdn.net/weixin_43454320/article/details/116105369
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。