通过 OpenCV 调用 CSI/USB 摄像头

向大家展示如何通过 OpenCV 调用 CSI/USB 摄像头。

在本系列上一篇文章里,我们为大家介绍了 Jetson Nano 2GB 安装 CSI 摄像头的方法,以及最基础的启动指令。在本篇文章中,我们将向大家展示如何通过 OpenCV 调用 CSI/USB 摄像头。

本期我们会带着大家使用这个摄像头,执行一些很实用的图像处理(image processing)应用,至于计算机视觉(computer vision)的应用,将在下一期里带着大家一起操作。

什么是图像处理?什么又是计算机视觉?如果您有所混淆的话,这里先做个基本说明,二者之间的区隔还是很明显的:

图像处理:输入为图像,输出也是图像

过程中对于图形进行一些应用处理,例如颜色空间(color space)转换、图像格式转换、尺寸转换、角度转换、图像合成等操作,最基本的就是将摄像头的图像读入,显示在屏幕上,并写入磁盘,这就形成一个最简单的录像功能。

计算机视觉:输入为图像,输出为信息

在输入的图像/视频中,找到特定信息的技术,例如基于颜色的追踪、物体边缘的检测、将图像的像素转成信号直方图(histogram)等计算,甚至于车道查找(lane finding)、人脸检测(face detection)等,都属于计算机视觉的范畴,其输入为一张图像,但输出的是某类从图像中淬炼出来的信息。

在 Jetson Nano 2GB 搭建的 JetPack 4.4.1 版本里,内建 OpenCV 4.1.1 版本的开发环境,这是目前图像处理、计算机视觉领域使用率最高的开发工具,因此我们就用 OpenCV 搭配 CSI 摄像头来做图像处理项目。

这里使用 Jetson Nano 2GB 的自带的 gedit 全文编辑器来撰写代码,编程语言使用 Jetson Nano 2GB 预安装的 Python 3.6 版本,由于相关所需的开发环境都已经由 JetPack 4.4.1 完整提供,因此不需要再执行额外的安装,非常简便。

我们可以将视频数据认知为由连续的图像所组合,因此在这里全部以视频处理作为示范,比较动态。至于图像的处理方式,请自行调整代码,二者之间的差异主要在写入磁盘以及是否需要循环指令的部分,如下表:

实现摄像头录像功能

这个功能主要执行三个动作:

  1. 从摄像头读入图像
  2. 给定文件名
  3. 写入磁盘中

这些动作在 OpenCV 都有非常简单的对应指令可以操作,详细代码如下:

本代码以“ESC”键结束录像。

将读入的图像执行缩放

这个功能主要执行三个动作:

  1. 摄像头读入图像
  2. 调用 cv2.resize 函数进行图像尺寸改变,选择插值方式(cv2.INTER_NEAREST)
  3. 在屏幕上显示

完整代码如下:

本代码以“ESC”键结束录像。

将读入的图像执行旋转

这个功能主要执行 4 个动作:

  1. 从摄像头读入图像
  2. 找出图像中心点
  3. 调用 cv2.getRotationMatrix2D() 函数进行旋转
  4. 显示:本范例显示 90 度/ 180 度/ 270 度

详细代码如下:


本代码以“ESC”键结束录像。
 

本文介绍了 3 种在 Jetson Nano 2GB 上,结合 CSI 摄像头与 OpenCV 做的很实用的图像处理应用,应该很容易上手。后面将为您介绍几个常用的计算机视觉应用情况。

 


评论:
相关文章
知乎277万浏览热帖:少儿编程是不是收智商税?

少儿编程被越来越多的家长关注,很多媒体和机构也在宣传学习少儿编程的好处,部分宣传比较夸张,诸如“未来人工智能时代,不学习编程就会”导致家长更容易陷入焦虑,到底要不要孩子去学编程呢?


《七个世界,一个星球》豆瓣9.9!千万别错过这部顶级大片!

BBC团队拍摄制作、大卫老爷子(david attenborough)担任旁白,汉斯·季默负责配乐。还是熟悉的配方,还是神作的味道。


青少年机器人技术等级考试一二级结构动图

青少年机器人技术等级考试一二级结构动图。


乐高科技42131卡特彼勒D11推土机评测

让我们来跟随兄弟积木(The Brother Brick),一起了解这个套装吧!


使用Python开发Android应用的简易教程

在过去,如果你想要开发Android应用,你需要掌握Java或者Kotlin等编程语言,但是现在,Python也可以用来开发Android应用了。


Arduino Mega 2560开发板的引脚分配图及说明

本文介绍Arduino Mega2560开发板的引脚分配图及说明。


香橙派推出对标树莓派3B、CM4和Zero2W开发板

最近香橙派推出了它们的香橙派3B、香橙派CM4、香橙派Zero2W,代号和树莓派一模一样。分别对标树莓派的树莓派3B、树莓派CM4、以及树莓派Zero2W。


Arduino IDE环境下用ESP32控制多路LED调光

本实验在Ardu​ino IDE环境下,利用ESP32产生的PWM信号控制多个L​ED。


Micro:bit MicroPython 教程 5.1 什么是输入输出引脚

Micro:bit的底边有一条金属条,这些是输入/输出引脚(或简称I / O引脚)。


Jetson Nano 基础教程

作者:英伟达小助理   共52讲

Jetson Nano 推出 2GB 内存版本,不仅承袭了 Jetson Nano 所有 AI 开发环境与 IOT 控制功能,也能学习或开发 Python、OpenCV 与 AI 深度学习、ROS 自动控制等应用。

课程