4_树莓派机载计算机的机器视觉样例教程——无名创新
typora-root-url: img
树莓派机载计算机的机器视觉样例教程
执行本样例程序需要的硬件
- 树莓派机载计算机
- 摄像头
参照官方介绍:树莓派文档 - 相机 (raspberrypi.com)
OV5647 | IMX219 | USB摄像头 |
---|---|---|
![]() |
![]() |
![]() |
其中摄像头本样例选用性价比最高的官方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
结果如下图所示:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律