由于工程设计要用到树莓派的摄像头进行识别操作,本文将使用Python+OpenCV+Raspi 3B+ 来完成树莓派CSI摄像头的配置使用,以及后续的扩展操作(树莓派照相机)。

CSI摄像头的连接

将排线的接口查在树莓派上的对应位置即可,如下图。

在树莓派上使能摄像头功能

一般有两种方法,在这里我们采用一种博主认为比较方便的方法。

在命令行中输入:

$ sudo raspi-config

然后在【Enable Camera】一栏里,设置为TRUE即可,此时树莓派要重启哦。

摄像头的调试

测试摄像头是否能够正常使用,这时候我们可以利用Raspberry Pi给我们的raspistill来验证是否能够使用。

$ raspistill -o test.jpg

在/home/目录下会生成test.jpg文件,同时会出现摄像头的画面。

利用Python库操作摄像头

这里,如果你想直接用OpenCV来 操作摄像头,需进行如下设置(因为树莓派中的camera module是放在/boot/目录中以固件形式加载的,不是一个标准的V4L2的摄像头驱动):

sudo nano /etc/modules  

添加一行:bcm2835-v4l2
保存退出,重启树莓派,这时就可直接用OpenCV来直接操作摄像头啦(未测试是否有bug),这里默认读者在此前已经接触过OpenCV了🤗。

如果你不想进行上述设置,可以采用下边的方法。在命令行输入:

$ pip install picamera

安装成功后,我们可以新建一个Python文件,输入以下代码测试(用摄像头拍摄一张照片):

  from picamera.array import PiRGBArray
  from picamera import PiCamera
  import time
  import cv2
  ​
  camera = PiCamera()
  rawCapture = PiRGBArray(camera)
  time.sleep(0.1)
  camera.capture(rawCapture, format="bgr")
  image = rawCapture.array

  cv2.imshow("Image", image)
  cv2.waitKey(0)

获取视频流的代码:

  from picamera.array import PiRGBArray
  from picamera import PiCamera
  import time
  import cv2
   
  camera = PiCamera()
  camera.resolution = (640, 480)
  camera.framerate = 32
  rawCapture = PiRGBArray(camera)
   
  time.sleep(0.1)
   
  # 获取图片
  for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
      image = frame.array
   
      # 显示
      cv2.imshow("Frame", image)
      key = cv2.waitKey(1) & 0xFF
   
      # 清空缓存
      rawCapture.truncate(0)
   
      # 如果按到键盘字母'q'就退出循环
      if key == ord("q"):
          break

以上就是CSI摄像头的基本操作哦,如果你想通过触摸屏来做一个基于树莓派的照相机,给大家提供一个基本思路,用QTDesigner结合Python的PYQT5库来设计~~

本文结束,感谢阅读~~

Time waits for no one!