4_树莓派机载计算机的机器视觉样例教程——无名创新


typora-root-url: img

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

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

  • 树莓派机载计算机

在这里插入图片描述

  • 摄像头

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

OV5647IMX219USB摄像头
在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

其中摄像头本样例选用性价比最高的官方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

结果如下图所示:

在这里插入图片描述

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

结果如下图所示:

在这里插入图片描述

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

结果如下图所示:

在这里插入图片描述

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

结果如下图所示:

在这里插入图片描述

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

结果如下图所示:

在这里插入图片描述

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

结果如下图所示:

在这里插入图片描述

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

结果如下图所示:

在这里插入图片描述

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

结果如下图所示:

在这里插入图片描述

9、形状轮廓匹配

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

函数名称功能包名功能参数返回值
matchShapes(contour1, contour2, method, parameter) cv2 匹配轮廓形状 第一个参数contour1是模板轮廓
第二个参数contour2是用于匹配的轮廓模板
第三个参数method比较方式
第四个参数暂时没用到,一般直接给0
匹配到的轮廓

执行本demo终端输入

python3 1_template_match.py

结果如下图所示:

在这里插入图片描述

10、手势识别与人脸识别

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

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

执行本demo终端输入

python3 2_hand_detector.py
python3 3_face_detector.py

结果如下图所示:

在这里插入图片描述

在这里插入图片描述

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

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

函数名称功能包名功能参数返回值
CascadeClassifier(path) cv2 初始化分类器 参数path为分类器训练好的标准数据路径 创建好的分类器
detectMultiScale(gray,scaleFactor,minNeighbors) cv2 分类器检测 第一个参数gray输入检测图像
第二个参数scaleFactor前后两次相继的扫描中搜索窗口的比例系数
第三个参数minNeighbors表示构成检测目标的相邻矩形的最小个数
检测出的对象坐标信息

执行本demo终端输入

python3 4_classifier_detector.py

结果如下图所示:

在这里插入图片描述

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

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

函数名称功能包名功能参数返回值
QRCodeDetector() cv2 初始化二维码检测器 二维码检测器
detectAndDecode(gray) cv2 识别二维码 gray为灰度图像 codeinfo二维码表征的信息
points表示二维码的角点
qrcode表示二维码的原始排列
         

执行本demo终端输入

python3 5_qrcode_detector.py
python3 6_pyzbar_detector.py

结果如下图所示:

在这里插入图片描述

在这里插入图片描述

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

结果如下图所示:

在这里插入图片描述

posted @   无名小哥  阅读(353)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示