nanopi + usb摄像头视频获取

opencv

最简单的方法就是利用opencv的videcapture,直接获取每一帧的图像,但是由于使用的usb摄像头采集的视频格式是MJPEG,需要解码才能用,而opencv的MJPEG解码实在是有点慢,所以只能舍弃。

v4l2 + libjpeg-turbo

其实opencv内部采用的方案是v4l2 + libjpeg来做的usb视频采集(MJPEG格式)。主要耗时为libjpeg的解码时间,所以需要用更快的方式来替换,第一个想到的当然是硬件解码。

硬件解码

折腾了好久硬件解码,但是没有成功,网上的资料太少了,也没有全志AE的支持。如果哪位大侠有成功的经验,希望不吝赐教。

v4l2

v4l2采集usb视频,资料比较多,了解了v4l2的ioctl之后就很容易。可以参考和菜鸟一起学linux之V4L2摄像头应用流程

libjpeg-turbo

libjpeg-turbo一听名字就知道是lbjpeg的加速版本,主要是利用SIMD对编解码过程进行加速。

利用cmake & make进行编译。
nanopi+usb摄像头视频获取
nanopi+usb摄像头视频获取
其中,有一点要说明的是,直接cmake或报错—“找不到CPU类型”,最后发现是CMakeLists.txt里面的CMAKE_SYSTEM_PROCESSOR没有输入导致的,只能手动在CMakeLists.txt里面加上set(CMAKE_SYSTEM_PROCESSOR "arm-cortexa7"),最终cmake成功。

实际效果

opencv读取usb摄像头一帧(1280 x 720)时间: 143ms
v4l2+libjpegturbo读取一帧(1280 x 720)时间:70ms
加速比2:1

相关文章:

  • 2021-12-15
  • 2021-11-18
  • 2020-04-25
  • 2019-01-28
  • 2021-11-02
  • 2021-11-02
  • 2021-11-09
  • 2021-11-06
猜你喜欢
  • 2021-09-01
  • 2021-11-05
  • 2021-11-02
  • 2022-01-02
  • 2021-10-20
  • 2021-11-02
  • 2021-11-03
  • 2021-10-17
相关资源
相似解决方案