创意之星的AI控制器搭载了Linux操作系统,预先安装了Opencv计算机视觉库,而且提供了Python编程接口,可以方便的获取摄像头图像。
首先,在四轮小车前方安装摄像头,然后通过USB将摄像头插在创意之星AI控制器的USB接口上。
然后,我们可以通过Python编程接口获取摄像头图像,进行图像处理,实现各种功能。
首先可以通过查询/dev/video*设备文件,查看摄像头设备文件名,然后通过Opencv库打开摄像头设备文件,获取摄像头图像。
在AI控制器终端可输入如下指令:
ls /dev/video0
如果查询到了端口号,则说明摄像头设备文件名为video0,否则说明摄像头没有连接,请检查线路。
接下来可以通过下面的代码来打开摄像头,获取摄像头图像。
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
上述代码中,cap = cv2.VideoCapture(0)打开摄像头设备文件名为video0,cap.read()读取摄像头图像,cv2.imshow(‘frame’, frame)显示摄像头图像,cv2.waitKey(1) & 0xFF == ord(‘q’)按下键盘q键退出。
运行上述代码,就可以看到创意之星AI控制器摄像头的图像了。
我们还可以基于Opencv库,实现各种数字图像处理功能,例如图像的缩放,翻转,可以基于如下python代码实现:
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
frame = cv2.flip(frame, 1)
frame = cv2.resize(frame, (640, 480))
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
上述代码中,cap = cv2.VideoCapture(0)打开摄像头设备文件名为video0,cap.read()读取摄像头图像,cv2.flip(frame, 1)实现图像的翻转,cv2.resize(frame, (640, 480))实现图像的缩放,cv2.imshow(‘frame’, frame)显示摄像头图像,cv2.waitKey(1) & 0xFF == ord(‘q’)按下键盘q键退出。
其中,cv2.flip(frame, 1)中的1表示水平翻转,0表示垂直翻转,-1表示水平垂直翻转。
其中,cv2.resize(frame, (640, 480))中的(640, 480)表示缩放后的图像大小。
图像的翻转是非常有用的功能,这样我们就可以在任意角度安装摄像头然后通过软件来实现对于图像的调整,比如有的构型,可以反装摄像头,然后代码翻转。
图像的缩放也是非常有用的功能,这样我们在做一些比较大的运算的时候,可以先缩放图像,然后再进行运算,这样可以提高运算速度。
如果想保存摄像头获取的图像在控制器存储空间内,可以基于如下python代码实现:
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
elif cv2.waitKey(1) & 0xFF == ord('p'):
cv2.imwrite('frame.jpg', frame)
这里我们通过cv2.imwrite(‘frame.jpg’, frame)将摄像头获取的图像保存为frame.jpg。
按下键盘p键,就可以保存摄像头获取的图像。按下键盘q键,就可以退出程序。
颜色空间是指一种颜色模型及其表示方法。常见的颜色空间包括RGB、HSV、YUV等。不同的颜色空间适用于不同的应用场景。以下是一些常见的颜色空间及其特点:
这里我们重点介绍一下灰度颜色空间,灰度颜色空间的特点和应用如下:
特点
单通道:灰度图像只有一个通道,每个像素点的值表示该点的亮度。
简化计算:由于只有一个通道,处理灰度图像的计算量比处理彩色图像小。
对比度明显:灰度图像可以更明显地显示图像的对比度和细节。
应用
我们可以基于Opencv库,实现图像的颜色空间转换,例如将图像转换为灰度图像,可以基于如下python代码实现:
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame', frame)
cv2.imshow('gray', gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
上述代码中,cap = cv2.VideoCapture(0)打开摄像头设备文件名为video0,cap.read()读取摄像头图像,cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)将图像转换为灰度图像,cv2.imshow(‘frame’, frame)显示彩色图像,cv2.imshow(‘gray’, gray)显示灰度图像,cv2.waitKey(1) & 0xFF == ord(‘q’)按下键盘q键退出。
我们还可以基于Opencv库,在图像中画出圆形,线条,矩形等图形,可以基于如下python代码实现:
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
frame = cv2.flip(frame, 1)
frame = cv2.resize(frame, (640, 480))
cv2.circle(frame, (320, 240), 100, (0, 255, 0), 3)
cv2.line(frame, (0, 0), (640, 480), (255, 0, 0), 3)
cv2.rectangle(frame, (100, 100), (540, 380), (0, 0, 255), 3)
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
在上述代码中,cv2.circle(frame, (320, 240), 100, (0, 255, 0), 3)画出圆形,cv2.line(frame, (0, 0), (640, 480), (255, 0, 0), 3)画出线条,cv2.rectangle(frame, (100, 100), (540, 380), (0, 0, 255), 3)画出矩形。
其中,cv2.circle(frame, (320, 240), 100, (0, 255, 0), 3)中的(320, 240)表示圆心坐标,100表示半径,(0, 255, 0)表示颜色,3表示线条宽度。
其中,cv2.line(frame, (0, 0), (640, 480), (255, 0, 0), 3)中的(0, 0)表示线条起点坐标,(640, 480)表示线条终点坐标,(255, 0, 0)表示颜色,3表示线条宽度。
其中,cv2.rectangle(frame, (100, 100), (540, 380), (0, 0, 255), 3)中的(100, 100)表示矩形左上角坐标,(540, 380)表示矩形右下角坐标,(0, 0, 255)表示颜色,3表示线条宽度。
同学们可在创意之星AI控制器上运行上述代码,体会Opencv绘图的功能。
除了可以绘制图形,OpenCv还可以绘制文字,可以基于如下python代码实现:
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
frame = cv2.flip(frame, 1)
frame = cv2.resize(frame, (640, 480))
cv2.putText(frame, 'Hello, Uptech!', (100, 100), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
在上面的代码中,cv2.putText(frame, ‘Hello, Uptech!’, (100, 100), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)绘制文字。
Opencv在图像中绘制信息的功能非常有用,我们在后续的项目中会经常用到,比如绘制一个识别框,比如识别到人脸绘制出来,并在框上写名字等等,请同学们务必掌握。