typora-root-url: img

树莓派机载计算机的机器视觉样例教程

执行本样例程序需要的硬件

  • 树莓派机载计算机

计算机视觉实验 损毁图像修复 计算机视觉实例_计算机视觉实验 损毁图像修复

  • 摄像头

参照官方介绍:树莓派文档 - 相机 (raspberrypi.com)

OV5647

IMX219

USB摄像头

计算机视觉实验 损毁图像修复 计算机视觉实例_计算机视觉_02

计算机视觉实验 损毁图像修复 计算机视觉实例_包名_03

计算机视觉实验 损毁图像修复 计算机视觉实例_计算机视觉实验 损毁图像修复_04

其中摄像头本样例选用性价比最高的官方V1.3版本摄像头,该版本摄像头焦距为3.6mm,广角为66度,市面上也存在不同广角、焦距的版本,可以根据实际使用需求来选型。

1、图像的读取、灰度化、颜色分割、图像合成

本例程涉及的函数功能与参数介绍如下:

函数名称

功能包名

功能

参数

返回值

imread(path, num)

cv2

从某一路径下以某种编码方式读取图片

第一个参数path为图片路径,第二个参数num是以什么方式读入图片,1为彩色,0位黑白,默认为彩色

图像数组

cvtColor(p1,p2)

cv2

颜色空间转换

第一个参数p1待转换的图片,第二个参p2是转化的图片格式,例如cv2.COLOR_BGR2RGB 将BGR格式转换成RGB格式、cv2.COLOR_BGR2GRAY将BGR格式转换成GRAY格式

图像数组

imshow(name,pic)

cv2

图像窗口显示

第一个参数name是一个窗口名称,数据类型为字符串。第二个参数pic是需要显示的图像


split(pic)

cv2

拆分图像成单个颜色通道数据获取

参数pic为BGR类型的图像数组

(B,G,R)三个通道颜色数据

merge([b,g,r])

cv2

将单通道图像的合并成多通道

b,g,r为三个通道图像数组

合成的多通道图像数组

sleep(n)

time

延时函数

参数n为延时时间,单位为秒


shape[a]

numpy

查看矩阵或者获取形状

对象为矩阵时:

二维数组时参数a=0表示查看行数、1表示列数;三维时a=0表示二维数组的个数,1表示二维数组的行数、2表示二维数组的列数;

#对象为图像时:

img.shape[:2]取彩色图片的长、宽

img.shape[:3]取彩色图片的长、宽、通道

img.shape[0]图像的垂直尺寸(高度)

img.shape[1]图像的水平尺寸(宽度)

img.shape[2]图像的通道数

返回维度

zeros((a,b),dtype)

numpy

定义零矩阵

(a,b)待生成矩阵的行、列,dtype数据类型

零矩阵

执行本demo终端输入

python3 1_image_file_read_write_split_merge.py

结果如下图所示:

计算机视觉实验 损毁图像修复 计算机视觉实例_计算机视觉_05

2、图像的抓取与边缘检测

本例程涉及的函数功能与参数介绍如下:

函数名称

功能包名

功能

参数

返回值

VideoCapture(path)

cv2

从目标相机或者视频中抓取视频

参数path为摄像头名称,类型为字符串

视频抓取对象

set(propId,value)

cv2

对抓取对象的参数进行设置

参数propId过多,不便列举,具体参照《OpenCV-Python中文教程》page 7


read()

cv2

获取一帧图像


返回参数ret,img分别为抓取状态和图像

flip(filename, flipcode)

cv2

对图像进行翻转

参数filename需要操作的图像

参数flipcode表示翻转方式,1:hor 0:vert -1:hor+vert

翻转后的图像

Canny( img, threshold1, threshold2,apertureSize)

cv2

边缘检测

参数img为灰度图像

参数threshold1、threshold1为上下阈值

参数apertureSize为Sobel 算子大小

计算得到的边缘图像

执行本demo终端输入

python3 2_image_capture_canny_show.py

结果如下图所示:

计算机视觉实验 损毁图像修复 计算机视觉实例_计算机视觉_06

3、图像的二值化

本例程涉及的函数功能与参数介绍如下:

函数名称

功能包名

功能

参数

返回值

threshold(src, thresh, maxval, type):

cv2

将灰度图像二值化

src: 原图像

thresh: 阈值

type: 指定阈值类型;

maxval: 当type指定为THRESH_BINARY或THRESH_BINARY_INV时,需要设置此值

type具体参照《OpenCV-Python中文教程》page 36

返回二值化后的图像

subplot(a,b,i)

imshow(img)

title(str)

matplotlib.pyplot

调用

参数有多种方式具体参照连接

matplotlib.pyplot.subplot — Matplotlib 3.5.1 文档matplotlib.pyplot.title — Matplotlib 3.5.1 文档

matplotlib.pyplot.imshow — Matplotlib 3.5.1 文档


adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)

cv2

自适应阈值

src:灰度图像

maxValue:最大灰度值

adaptiveMethod:自适应阈值算法。ADAPTIVE_THRESH_MEAN_C或ADAPTIVE_THRESH_GAUSSIAN_C

thresholdType:opencv提供的二值化方法,只能THRESH_BINARY或THRESH_BINARY_INV

blockSize:拆分的区域大小

返回二值化后的图像

执行本demo终端输入

python3 3_image_binary.py

结果如下图所示:

计算机视觉实验 损毁图像修复 计算机视觉实例_计算机视觉实验 损毁图像修复_07

4、轮廓检测与绘制

本例程涉及的函数功能与参数介绍如下:

函数名称

功能包名

功能

参数

返回值

findContours(img, mode, method)

cv2

轮廓检测

img为输入待检测轮廓的图像

mode为轮廓检索的方式

cv2.RETR_EXTERNAL 只检测外轮廓

cv2.RETR_LIST 检测的轮廓不建立等级关系

cv2.RETR_CCOMP 建立两个等级的轮廓

cv2.RETR_TREE 建立一个等级树结构的轮廓。

method为轮廓近视方法,常用的有:

cv2.CHAIN_APPROX_NONE cv2.CHAIN_APPROX_SIMPLE

具体参照《OpenCV-Python中文教程》page 36

返回轮廓、轮廓的属性

drawContours(img, contours, contourIdx, color, thickness=None, lineType=None, hierarchy=None, maxLevel=None, offset=None)

cv2

轮廓绘制

img为轮廓绘制的图像

contours为轮廓数据,数据类型为list

contourIdx指定绘制轮廓list中的哪条轮廓,-1表示绘制所有轮廓

color绘制的颜色

thickness表明轮廓线的宽度


执行本demo终端输入

python3 4_otsu_binary_find_contours.py

结果如下图所示:

计算机视觉实验 损毁图像修复 计算机视觉实例_计算机视觉_08

5、hsv颜色分离二值化(红色)

本例程涉及的函数功能与参数介绍如下:

函数名称

功能包名

功能

参数

返回值

inRange(src, lower, upper)

cv2

颜色分离

第一个参数hsv指的是原图

第二个参数lower指的是图像中低于这个lower的值,图像值变为0

第三个参数:upper指的是图像中高于这个upper的值,图像值变为0

返回二值化后的图像

erode(src, kernel, iteration)

cv2

腐蚀操作

第一个参数src表示的是输入图片

第二个参数kernel表示的是方框的大小

第三个参数iteration表示迭代的次数

腐蚀操作后的图像

dilate(src, kernel, iteration)

cv2

膨胀操作

第一个参数src表示的是输入图片

第二个参数kernel表示的是方框的大小

第三个参数iteration表示迭代的次数

膨胀操作后的图像

执行本demo终端输入

python3 5_hsv_binary_find_contours.py

结果如下图所示:

计算机视觉实验 损毁图像修复 计算机视觉实例_计算机视觉_09

6、blob特征点检测与绘制

本例程涉及的函数功能与参数介绍如下:

函数名称

功能包名

功能

参数

返回值

SimpleBlobDetector_Params()

cv2

创建一个检测器默认参数组


参数组默认值params

SimpleBlobDetector_create(params)

cv2

创建一个检测器,采用修改后的参数

params检测器参数

检测器

delect(gray)

cv2

特征点检测

gray灰度图像

提取到的关键点

drawKeypoints(img,keypoints,outputimage,color)

cv2

关键点绘制

img也就是原始图片

keypoints从原图中获得的关键点

outputimage输出

color颜色设置

flags绘图功能的标识设置

绘制后的图像

执行本demo终端输入

python3 6_simple_blob_detect.py

结果如下图所示:

计算机视觉实验 损毁图像修复 计算机视觉实例_python_10

7、霍夫圆检测

本例程涉及的函数功能与参数介绍如下:

函数名称

功能包名

功能

参数

返回值

HoughCircles(img, method, dp, minDist, circles, param1, param2, minRadius, maxRadius)

cv2

霍夫圆检测

gray灰度图像

method检测方法,常用参数CV_HOUGH_GRADIENT

dp为内测圆心累加器图像的分辨率和输入图像之比的倒数

minDist检测两个圆心之间的最小半径

circles为检测圆返回值

param1表示canny边缘检测算子的高阈值

param2为检测的圆心的累加器阈值

minRadius、maxRadius分别表示圆的最小和最大半径

检测到的圆数据

执行本demo终端输入

python3 7_hough_circles_detect.py

结果如下图所示:

计算机视觉实验 损毁图像修复 计算机视觉实例_python_11

8、霍夫线检测

本例程涉及的函数功能与参数介绍如下:

函数名称

功能包名

功能

参数

返回值

HoughLinesP(img,rho,theta, threshold,lines, minLineLength,maxLineGap)

cv2

霍夫线检测

第一个参数image为二值图像,一般使用canny边缘检测的结果图像;

第二个参数rho表示线段以像素为单位的距离精度

第三个参数theta, 线段以弧度为单位的角度精度

threshod: 累加平面的阈值参数

lines:返回检测线数据

minLineLength:线段以像素为单位的最小长度

maxLineGap:同一方向上两条线段判定为一条线段的最大允许间隔

检测到的线数据

执行本demo终端输入

python3 8_find_hough_lines.py

结果如下图所示:

计算机视觉实验 损毁图像修复 计算机视觉实例_python_12

9、形状轮廓匹配

本例程涉及的函数功能与参数介绍如下:

函数名称

功能包名

功能

参数

返回值

matchShapes(contour1, contour2, method, parameter)

cv2

匹配轮廓形状

第一个参数contour1是模板轮廓

第二个参数contour2是用于匹配的轮廓模板

第三个参数method比较方式

第四个参数暂时没用到,一般直接给0

匹配到的轮廓

执行本demo终端输入

python3 1_template_match.py

结果如下图所示:

计算机视觉实验 损毁图像修复 计算机视觉实例_包名_13

10、手势识别与人脸识别

本例程涉及的函数功能与参数介绍参照官方资料:

cvzone: 人脸检测,手势检测等 (gitee.com)

执行本demo终端输入

python3 2_hand_detector.py
python3 3_face_detector.py

结果如下图所示:

计算机视觉实验 损毁图像修复 计算机视觉实例_人工智能_14

计算机视觉实验 损毁图像修复 计算机视觉实例_计算机视觉_15

11、级联分类器与人脸识别

本例程涉及的函数功能与参数介绍如下:

函数名称

功能包名

功能

参数

返回值

CascadeClassifier(path)

cv2

初始化分类器

参数path为分类器训练好的标准数据路径

创建好的分类器

detectMultiScale(gray,scaleFactor,minNeighbors)

cv2

分类器检测

第一个参数gray输入检测图像

第二个参数scaleFactor前后两次相继的扫描中搜索窗口的比例系数

第三个参数minNeighbors表示构成检测目标的相邻矩形的最小个数

检测出的对象坐标信息

执行本demo终端输入

python3 4_classifier_detector.py

结果如下图所示:

计算机视觉实验 损毁图像修复 计算机视觉实例_人工智能_16

12、二维码与条形码的检测

本例程涉及的函数功能与参数介绍如下:

函数名称

功能包名

功能

参数

返回值

QRCodeDetector()

cv2

初始化二维码检测器


二维码检测器

detectAndDecode(gray)

cv2

识别二维码

gray为灰度图像

codeinfo二维码表征的信息

points表示二维码的角点

qrcode表示二维码的原始排列

执行本demo终端输入

python3 5_qrcode_detector.py
python3 6_pyzbar_detector.py

结果如下图所示:

计算机视觉实验 损毁图像修复 计算机视觉实例_计算机视觉_17

计算机视觉实验 损毁图像修复 计算机视觉实例_python_18

13、AprilTag标签识别

本例程涉及的函数功能与参数介绍如下:

函数名称

功能包名

功能

参数

返回值

apriltag.Detector(apriltag.DetectorOptions(families=‘tag36h11’))

apriltag

初始化AprilTag检测器

AprilTag标签组

AprilTag检测器

detect(gray,return_image=True)

apriltag

识别AprilTag

gray为灰度图像

return_image表示使能图像返回

tags识别到的AprilTag信息,img_返回的二维码图像

执行本demo终端输入

python3 7_apriltag_detector.py

结果如下图所示:

计算机视觉实验 损毁图像修复 计算机视觉实例_人工智能_19