欢迎光临散文网 会员登陆 & 注册

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

2022-02-27 00:02 作者:无名创新开源无人机EDU  | 我要投稿

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

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

  • 树莓派机载计算机

  • 摄像头

参照官方介绍:树莓派文档 - 相机 (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创建一个检测器默认参数组无参数组默认值paramsSimpleBlobDetector_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识别AprilTaggray为灰度图像
return_image表示使能图像返回tags识别到的AprilTag信息,img_返回的二维码图像

执行本demo终端输入

python3 7_apriltag_detector.py

结果如下图所示:


4_树莓派机载计算机的机器视觉样例教程——无名创新的评论 (共 条)

分享到微博请遵守国家法律