- 1. AI识别
- 2. 匹配
- 3. OpenCV基础函数
- 4.OpenCV查找与绘制
- 4.1 轮廓查找(cv.find_contours)
- 4.2 绘制轮廓(cv.draw_contours)
- 4.3 绘制矩形(cv.draw_rectangle)
- 4.4 绘制线条(cv.draw_lines)
- 4.5 轮廓外接最小闭合圆查找(cv.minEnclosingCircle)
- 4.6 绘制文本(cv.putText)
- 4.7 绘制轮廓凸包(cv.convexHull)
- 4.8 多边形逼近(cv.approxPolyDP)
- 4.9 凸缺陷查找(cv.convexityDefects)
- 4.10 拟合椭圆(cv.fit_ellipse)
- 4.11 绘制椭圆(cv.draw_ellipse)
- 4.12 绘制圆(cv.draw_circle)
- 4.13 绘制缺陷(cv.draw_defects)
- 5. 直方图操作
- 6.过滤
- 7.边缘检测
- 8.形态学处理
- 9.分割
- 10.提取
- 11.OpenCV数学计算
- 12.OpenCV基础类型
- 13.OpenCV类型转换
1. AI识别
1.1 YOLO检测(yolov3.detect)
算子名称 | yolov3.detect | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | string_t | model | 模型名称 |
cv::Mat | image | 待识别图片 | |
int | topK | 识别框topK排序 | |
bool | insideFilter | 识别框包含过滤 | |
返回值 | YOLOv3_t | YOLO识别结果包围盒列表 | |
功能描述 | 用于从站模式给主站发送数据。 1. 如果是CAN总线等抢占式通道,则立即发送; 1. 如果是485等轮询通道,系统将暂存数据,等候主节点轮询时发送。 |
topK类型消息数据用法:
table = sys.propset_t({
var1 = 1,
var2 = 2.0,
var3 = "str"
})
insideFilter
table = sys.propset_t({
var1 = 1,
var2 = 2.0,
var3 = "str"
})
YOLOv3_t结构 ```cpp class YOLOv3_t { public: int width; // Width of input image. int height; // Height of input image. BoundingBox_vec bboxes; // All objects, The vector of BoundingBox .
public: bool is_empty(void); };
脚本示例:
```lua
detect_img = ("yolo4_pallet", equa_img, 1, false)
1.2 绘制YOLO识别框(yolov3.draw_bbox)
算子名称 | yolov3.draw_bbox | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | image | 图片 |
YOLOv3_in | imgdet | YOLO识别结果包围盒列表 | |
bool | drawScore | 识别分数 | |
返回值 | cv::Mat | 已绘制边框图片 | |
功能描述 | 用于绘制识别框并识别分数。 |
脚本示例:
image = equa_img --均衡化处理结果图
imgdet = detect_img --YOLO识别结果
drawScore = true
bbox_draw = yolov3.draw_bbox(image, imgdet, drawScore)
1.3 拣选YOLO识别框(yolov3.pick_bbox)
算子名称 | yolov3.pick_bbox | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | YOLOv3_in | imgdet | YOLO识别结果包围盒列表 |
string_t | label | 识别框拣选列表 | |
返回值 | BoudingBox_ptr | 识别框所选范围 | |
功能描述 | 用于拣选识别框所选范围。 |
脚本示例:
imgdet = detect_img
label = "all"
bbox_pick = (imgdet, label)
1.4 识别框分类(yolov3.sort_bbox)
算子名称 | yolov3.sort_bbox | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | YOLOv3_in | imgdet | YOLO识别结果 |
返回值 | string_t | 识别框分类结果 | |
功能描述 | 将YOLO识别结果进行分类 |
脚本示例:
text = yolov3.sort_bbox(bbox_draw, detect.bboxes)
2. 匹配
2.1 模板匹配(cv.match_template)
算子名称 | cv.match_template | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 待搜索图像 |
cv::Mat | obj | 模板图像 | |
vector |
Rect | 匹配结果 | |
int | type | 模板类别 | |
int | num | 模板序号 | |
返回值 | cv::Vec |
匹配结果 | |
功能描述 | 对比图像像素值进行匹配 |
2.2 特征匹配(cv.match_flann)
算子名称 | cv.match_flann | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 待搜索图像 |
cv::Mat | obj | 模板图像 | |
bool | drawBox | 绘制特征边框 | |
返回值 | cv::Mat | 特征匹配结果 | |
功能描述 | 记录目标图像与待匹配图像的特征点 |
2.3 形状匹配(cv.match_shapes)
算子名称 | cv.match_shapes | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 待搜索图像 |
cv::Mat | obj | 匹配图像 | |
返回值 | cv::Mat | 形状匹配结果 | |
功能描述 | 通过轮廓计算进行形状匹配 |
3. OpenCV基础函数
3.1 版本号(cv.version)
算子名称 | cv.version | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
返回值 | void | 格式化 | |
功能描述 | 创建新版本 |
3.2 定义文件名(cv.filename)
算子名称 | cv.filename | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | string_t | filePath | 文件路径 |
功能描述 | 定义文件名 |
3.3 文件目录(cv.imlist)
算子名称 | cv.imlist | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | string_t | dirname | 地址名 |
功能描述 | 文件目录 |
3.4 读取文件(cv.imread)
算子名称 | cv.imread | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | string_t | filename | 文件路径 |
bool | color | 颜色 | |
返回值 | cv::Mat | 图片 | |
功能描述 | 读取文件 |
脚本示例:
image = cv.read("images/20210707_140546755_NG.jpeg", false)
3.5 保存图像(cv.imwrite)
算子名称 | cv.imwrite | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | string_t | filename | 文件名 |
cv::Mat | image | 图片 | |
功能描述 | 保存文件 |
脚本示例:
cv.imwrite("imgout/test.jpg", image)
3.6 创建可变形矩形(cv.Rect2f)
算子名称 | cv.imrect | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | float | x | x坐标 |
float | y | y坐标 | |
float | w | 宽度 | |
float | h | 高度 | |
返回值 | cv::Mat | 图片 | |
功能描述 | 创建可变形矩形 |
脚本示例:
x = 0.15
y = 0.0
w = 0.03
h = 1.0
lrect = cv.Rect2f(image, x, y, z, w)
3.7 显示图像(cv.imshow)
算子名称 | cv.imshow | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | string_t | winname | 显示名 |
cv::Mat | image | 图片 | |
功能描述 | 显示图像 |
脚本示例:
cv.imshow("equa_img", equa_img)
3.8 读取矩形(cv.imrect)
算子名称 | cv.imrect | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | image | 输入图像 |
cv::Rect | rect | 输入矩形 | |
返回值 | cv::Mat | 矩形区域 | |
功能描述 | 读取矩形区域图像 |
脚本示例:
dlrect = cv.imrect(image, lrect)
4.OpenCV查找与绘制
4.1 轮廓查找(cv.find_contours)
算子名称 | cv.find_contours | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | img | 图片 |
int | thresh | 阈值 | |
int | block | 指定区块大小 | |
bool | inv | 是否包围 | |
int | mode | 轮廓类型 | |
返回值 | contours | 待绘制轮廓 | |
功能描述 | 查找图片中的轮廓 |
轮廓类型介绍:
mode | 参数值 | 含义 |
---|---|---|
CV_RETR_EXTERNAL | 0 | 只检测出最外轮廓,即c0 |
CV_RETR_LIST | 1 | 检测出所有的轮廓并将它们保存早表(list)中 |
CV_RETR_CCOMP | 2 | 检测出所有的轮廓并将它们组织成双层的结构 第一层是外部轮廓边界 第二层边界是孔的边界 |
CV_RETR_TREE | 3 | 检测出所有轮廓并且重新建立网状的轮廓结构 |
脚本示例:
img = image
thresh = -2
block = 10
inv = true
mode = 1
contours = cv.find_contours(img, thresh, block, inv, mode)
4.2 绘制轮廓(cv.draw_contours)
算子名称 | cv.draw_contours | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | img | 图片 |
contours | cnts | 要绘制的轮廓 | |
bool | drawBG | 轮廓背景 | |
int | maxlevel | 绘制轮廓层次深度 | |
返回值 | cv::Mat | 已绘制轮廓图 | |
功能描述 | 绘制出制定轮廓 |
脚本示例:
img = image
cnts = contours --轮廓识别结果
drawBG = true
maxlevel = -1
contours_draw = cv.draw_contours(image, contours, true, -1)
4.3 绘制矩形(cv.draw_rectangle)
算子名称 | cv.draw_rectangle | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图片 |
cv::Rect | rect | 输入矩形 | |
int | thickness | 矩形线条粗细程度 >=1 绘制线宽 -1 填充矩形 |
|
float | alpha | 背景图像透明度,范围:0.0~1.0 | |
float | beta | 绘制矩形透明度,范围:0.0~1.0 | |
返回值 | cv::Mat | dst | 已绘制矩形图片 |
功能描述 | 绘制指定参数的矩形 |
脚本示例:
src = cv.Mat() -- 前一步骤得到的原图像
rect = cv.Rect2f() -- 要绘制的矩形框
thickness = -1
alpha = 1.0 -- 背景图像透明度
beta = 0.8 -- 矩形透明度
dst = cv.draw_rectangle(src, rect, thickness, alpha, beta)
4.4 绘制线条(cv.draw_lines)
算子名称 | cv.draw_lines | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
cv::Lines | lines | 输入线变化 | |
返回值 | cv::Mat | 霍夫线变换后的图像 | |
功能描述 | 绘制霍夫线变换的线条图像 |
脚本示例:
src = lrect --矩形读取得到的图像
lines = llines --霍夫线变换得到的图像
lning = cv.draw_lines(src, lines)
4.5 轮廓外接最小闭合圆查找(cv.minEnclosingCircle)
算子名称 | cv.minEnclosingCircle | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | contours | contour | 已绘制的轮廓 |
返回值 | cv::Point2f | 圆心坐标 | |
float | 圆的半径 | ||
功能描述 | 根据输入轮廓,查找轮廓最小外接圆,返回圆心与半径(该函数并非直接绘制圆形) |
脚本示例:
cir_center, cir_radius = cv.minEnclosingCircle(contour)
4.6 绘制文本(cv.putText)
算子名称 | cv.putText | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
string_t | text | 输入文本 | |
int | x | 文本框位置(左下角点横坐标) | |
int | y | 文本框位置(左下角点纵坐标) | |
返回值 | cv::Mat | 绘制文本后图片 | |
功能描述 | 在输入图像中,绘制文本信息,并制定位置 |
脚本示例:
text_img = cv.putText(img, text, 1400, 1700)
4.7 绘制轮廓凸包(cv.convexHull)
算子名称 | cv.convexHull | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | contours | contour | 已查找出的轮廓 |
返回值 | contours | 轮廓凸包 | |
功能描述 | 获得轮廓的凸包 |
脚本示例:
hull_img = cv.convexHull(contour)
4.8 多边形逼近(cv.approxPolyDP)
算子名称 | cv.approxPolyDP | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | contours | contour | 已查找出的轮廓 |
double | epsilon | 逼近准确度,允许原多边形与拟合结果之间存在的最大偏差 | |
返回值 | contours | 近似曲线 | |
功能描述 | 把一个连续光滑曲线折线化 |
脚本示例:
img_cots = cv.approxPolyDP(img_cots, 100)
4.9 凸缺陷查找(cv.convexityDefects)
算子名称 | cv.approxPolyDP | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | contours | contour | 已查找出的轮廓 |
contours | convexhull | 轮廓凸包 | |
返回值 | defects | 凸缺陷检测信息 | |
功能描述 | 查找出轮廓凸包的凸缺陷 |
脚本示例:
hull_def = cv.convexityDefects(contour, convexhull)
4.10 拟合椭圆(cv.fit_ellipse)
算子名称 | cv.fit_ellipse | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | contours | contour | 已查找出的轮廓 |
返回值 | cv::RotatedRect | 拟合椭圆(椭圆为可旋转矩形类) | |
功能描述 | 根据输入轮廓,拟合椭圆 |
脚本示例:
rect = cv.fit_ellipse(contour)
4.11 绘制椭圆(cv.draw_ellipse)
算子名称 | cv.draw_ellipse | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
cv::RotatedRect | rRect | 已识别椭圆 | |
bool | filledMask | 填充 | |
返回值 | cv::Mat | 已绘制椭圆图片 | |
功能描述 | 绘制出已识别椭圆 |
脚本示例:
mellipse = cv.draw_ellipse(image, marcRect, false)
4.12 绘制圆(cv.draw_circle)
算子名称 | cv.draw_circle | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
cv::Point2f | center | 输入圆心 | |
float | radius | 输入半径 | |
返回值 | cv::Mat | 已绘制圆图片 | |
功能描述 | 根据圆心半径绘制出圆 |
脚本示例:
draw_circle = cv.draw_circle(cotimage, cir_center, cir_radius)
4.13 绘制缺陷(cv.draw_defects)
算子名称 | cv.draw_defects | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
contours | contour | 已识别轮廓 | |
defects | defects | 以识别缺陷 | |
bool | filledMask | 填充 | |
返回值 | cv::Mat | 以绘制缺陷图片 | |
功能描述 | 将缺陷绘制在图片上 |
脚本示例:
defs = cv.draw_defects(cotimage, contour, hull_def, false)
5. 直方图操作
5.1 二值化处理(cv.threshold)
算子名称 | cv.threshold | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | img | 图片 |
int | thresh | 阈值的具体值 | |
int | block | 像素领域块 | |
bool | inv | 大于阈值为1,小于阈值为0 | |
返回值 | cv::Mat | 处理后图像 | |
功能描述 | 根据阈值将像素值进行二值化,放大像素差 |
img = image
thresh = 10
block = 10
inv = false
thre_img = cv.threshold(img, thresh, block, inv)
5.2 归一化处理(cv.normalize)
算子名称 | cv.normalize | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | img | 图片 |
double | maxVal | 数组最大值 | |
double | minVal | 数组最小值 | |
int | normType | 归一化类型 | |
返回值 | cv::Mat | 处理后图像 | |
功能描述 | 将不同范围的值,映射到固定的相同范围内 |
归一化类型介绍:
normType类型 | 参数值 | 含义 |
---|---|---|
cv::NORM_L1 | 1 | 归一化数组的L1范数(绝对值的和) |
cv::NORM_L2 | 2 | 归一化数组的L2范数(欧几里德) |
cv::NORM_INF | 3 | 归一化数组的最大值 |
cv::NORM_MINMAX | 4 | 数组的数字被平移或缩放到一个指定的范围 |
描述:L1用的是绝对值即曼哈顿距离,L2用的是平方即欧几里德距离,MINMAX就是映射到a, b区间内。 |
脚本示例:
img = image
maxVal = 255
minVal = 0
normType = 4
norm_img = cv.normalize(image, maxVal, minVal, norType)
5.3 均衡化处理(cv.equalize)
算子名称 | cv.equalize | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | img | 图片 |
返回值 | cv::Mat | 处理后图像 | |
功能描述 | 增加像素灰度值的动态范围,增强对比度 |
脚本实例:
img = image
equa_img = cv.equalize(img)
5.4 自适应阈值操作(cv.threshold_adaptive)
算子名称 | cv.threshold_adaptive | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | img | 图片 |
int | block | 像素领域块 | |
bool | inv | 大于阈值为1,小于阈值为0 | |
返回值 | cv::Mat | 处理后图像 | |
功能描述 | 增加像素灰度值的动态范围,增强对比度 |
脚本实例:
img = image
block = 10
inv = true
adth_img = cv.threshold_adaptive(img, block, inv)
5.5 自适应阈值操作(cv.threshold_integral)
算子名称 | cv.threshold_adaptive | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | img | 图片 |
int | block | 像素领域块 | |
bool | inv | 大于阈值为1,小于阈值为0 | |
返回值 | cv::Mat | 处理后图像 | |
功能描述 | 增加像素灰度值的动态范围,增强对比度 |
脚本实例:
img = image
block = 10
inv = true
adth_img = cv.threshold_adaptive(img, block, inv)
6.过滤
6.1 高斯滤波器(cv.GaussianBlur)
算子名称 | cv.GaussianBlur | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
cv::Size | ksize | 卷积核大小 | |
返回值 | cv::Mat | 高斯模糊图像 | |
功能描述 | 对图像进行高斯模糊处理,消除高斯噪音干扰 |
脚本示例:
src = image
ksize = cv.Size2i(5,5)
gaus_img = cv.GaussianBlur(image, ksize)
6.2 索贝尔滤波器(cv.Sobel)
算子名称 | cv.Sobel | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
int | ddepth | 输出像素深度 | |
int | ksize | 卷积核大小 | |
double | scale | 缩放比例常数,默认1 | |
double | delta | 可选的增量,将会加到输出图像中 | |
int | borderType | 边界模式,默认BORDER_DEFAULT | |
返回值 | cv::Mat | 梯度计算后图像 | |
功能描述 | 消除噪音对图像的影响 |
脚本实例:
src = image
ddepth = CV_64F
ksize = 3
scale = 1
delta = 0
border = BORDER_DEFAULT
sobel_img = cv.Sobel(src, ddepth, ksize, scale, delta, border)
6.3 Scharr滤波器(cv.Scharr)
算子名称 | cv.Scharr | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
int | ddepth | 输出像素深度 | |
int | ksize | 卷积核大小 | |
double | scale | 缩放比例常数,默认1 | |
double | delta | 可选的增量,将会加到输出图像中 | |
int | borderType | 边界模式,默认BORDER_DEFAULT | |
返回值 | cv::Mat | 过滤处理图像 | |
功能描述 | 与cv.Sobel功能相同,但精度更高 |
脚本示例:
src = image
ddepth = CV_64F
ksize = 3
scale = 1
delta = 0
border = BORDER_DEFAULT
scharr_img = cv.scharr(src, ddepth, ksize, scale, delta, border)
6.4 拉普拉斯滤波器(cv.Laplacian)
算子名称 | cv.Laplacian | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
int | ddepth | 输出像素深度 | |
int | ksize | 卷积核大小 | |
double | scale | 缩放比例常数,默认1 | |
double | delta | 可选的增量,将会加到输出图像中 | |
int | borderType | 边界模式,默认BORDER_DEFAULT | |
返回值 | cv::Mat | 变换后图像 | |
功能描述 | 增强图像中灰度突变的区域,减弱灰度的缓慢变化区域 |
脚本示例:
src = image
ddepth = CV_64F
ksize = 3
scale = 1
delta = 0
border = BORDER_DEFAULT
lapl_img = cv.Laplacian(src, ddepth, ksize, scale, delta, border)
6.5 简单模糊(cv.blur)
算子名称 | cv.blur | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
cv::Size | ksize | 卷积核大小 | |
返回值 | cv::Mat | 模糊图像 | |
功能描述 | 实现简单模糊 |
脚本示例:
src = image
ksize = cv.Size2i(5,5)
blur_img = cv.blur(image, ksize)
7.边缘检测
7.1 霍夫变换(cv.HoughLines)
算子名称 | cv.HoughLines | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | image | 输入图像 |
double | rho | 设置直线像素分辨率 | |
double | theta | 设置直线弧度分辨率 | |
int | threshold | 阈值 | |
double | srn | 细化直线计算结果,默认0 | |
double | stn | 细化直线计算结果,默认0 | |
返回值 | cv::Mat | 图像霍夫变换后的线 | |
功能描述 | 通过霍夫变换,在图中找出大量的线 |
脚本示例:
imgage = sobel_img --索贝尔导数计算结果图像
rho = 1
theta = CV_PI / 180
threshold = 300
srn = 0
stn = 0
hough_img = cv.HoughLines(image, rho, theta, threshold, srn, stn)
7.2 获取矩形边界(cv.boundingRect)
算子名称 | cv.boudingRect | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | image | 输入图像 |
cv::Lines | lines | 线 | |
float | rho | 直线距离坐标原点的距离 | |
float | theta | 直线过坐标原点垂线与x轴夹角 | |
double | a | 夹角的余弦值 | |
double | b | 夹角的正弦值 | |
double | x0 | 直线与过坐标原点的垂线的交点 | |
double | y0 | 直线与过坐标原点的垂线的交点 | |
double | length | 图像高宽的最大值 | |
返回值 | cv::Mat | 矩形边界图像 | |
功能描述 | 得到包覆此轮廓的最小正矩形 |
脚本示例:
image = sobel_img
lines = hough_img
rho = lines[i][0]
theta = lines[i][1]
a = cos(theta)
b = sin(theta)
x0 = a*rho
y0 = b*rho
length = max(sobel_img.rows, sobel_img.cols)
bound_img = cv.boudingRect(image, lines, rho, theta, a, b, x0, y0, length)
7.3 边缘检测(cv.Canny)
算子名称 | cv.Canny | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
double | threshold1 | 下限阈值 | |
double | threshold2 | 上限阈值 | |
返回值 | cv::Mat | 边缘图像 | |
功能描述 | 将单个的边缘候选像素加入轮廓 |
脚本示例:
src = gaus_img
threshold1 = 5
threshold2 = 30
canny_img = cv.Canny(src, thrshold1, threshold2)
简介:介于上限阈值和下限阈值之间的像素点,被设置为弱边缘。进一步判断,如果其领域内有强边缘像素,则 保留,如果没有,则剔除。
8.形态学处理
8.1 膨胀(cv.dilate)
算子名称 | cv.dilate | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
cv::Mat | dst | 结果图像 | |
cv::Point | anchor | 锚点的位置 | |
int | iterations | 迭代次数 | |
int | borderType | 边界模式 | |
cv::Scalar | borderValue | 边缘值 | |
返回值 | cv::Mat | 膨胀图像 | |
功能描述 | 将图像进行膨胀处理,主要作用于连通分支 |
脚本示例:
src = thre_img --二值化结果图像
dst = dilate_img
anchor = point(-1, -1)
iterations = 2
borderType = BORDER_CONSTANT
borderValue = morphologyDefaultBorderValue()
dilate_img = cv.dilate(src, dst, anchor, iterations, borderType, borderValue)
8.2 腐蚀(cv.erode)
算子名称 | cv.erode | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
cv::Mat | dst | 结果图像 | |
cv::Point | anchor | 锚点的位置 | |
int | iterations | 迭代次数 | |
int | borderType | 边界模式 | |
cv::Scalar | borderValue | 边缘值 | |
返回值 | cv::Mat | 腐蚀图像 | |
功能描述 | 将图像进行腐蚀处理,主要作用于消除图像中斑点一样的噪声 |
脚本示例:
src = dilate_img --膨胀结果图像
dst = erode_img
anchor = point(-1, -1)
iterations = 2
borderType = BORDER_CONSTANT
borderValue = morphologyDefaultBorderValue()
erode_img = cv.erode(src, dst, anchor, iterations, borderType, borderValue)
8.3 开操作(cv.morph_open)
算子名称 | cv.morph_open | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
cv::Mat | dst | 结果图像 | |
cv::Point | anchor | 锚点的位置 | |
int | iterations | 迭代次数 | |
int | borderType | 边界模式 | |
cv::Scalar | borderValue | 边缘值 | |
返回值 | cv::Mat | 开操作处理后图像 | |
功能描述 | 对图像进行开操作处理(先将图像腐蚀,然后对腐蚀的结果膨胀) |
脚本示例:
src = thre_img --二值化结果图像
dst = open_img
anchor = point(-1, -1)
iterations = 2
borderType = BORDER_CONSTANT
borderValue = morphologyDefaultBorderValue()
open_img = cv.morph_open(src, dst, anchor, iterations, borderType, borderValue)
8.4 闭操作(cv.morph_close)
算子名称 | cv.morph_close | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
cv::Mat | dst | 结果图像 | |
cv::Point | anchor | 锚点的位置 | |
int | iterations | 迭代次数 | |
int | borderType | 边界模式 | |
cv::Scalar | borderValue | 边缘值 | |
返回值 | cv::Mat | 闭操作处理后图像 | |
功能描述 | 对图像进行开操作处理(先将图像膨胀,然后对腐蚀的结果腐蚀) |
脚本示例:
src = thre_img --二值化结果图像
dst = close_img
anchor = point(-1, -1)
iterations = 2
borderType = BORDER_CONSTANT
borderValue = morphologyDefaultBorderValue()
close_img = cv.morph_close(src, dst, anchor, iterations, borderType, borderValue)
8.5 形态学梯度(cv.morph_gardient)
算子名称 | cv.morph_gardient | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
cv::Mat | dst | 结果图像 | |
cv::Point | anchor | 锚点的位置 | |
int | iterations | 迭代次数 | |
int | borderType | 边界模式 | |
cv::Scalar | borderValue | 边缘值 | |
返回值 | cv::Mat | 形态学梯度处理后图像 | |
功能描述 | 膨胀结果图像减腐蚀结果图像,得到源图像目标边缘 |
脚本示例:
src = thre_img --二值化结果图像
dst = gard_img
anchor = point(-1, -1)
iterations = 2
borderType = BORDER_CONSTANT
borderValue = morphologyDefaultBorderValue()
gard_img = cv.morph_gardient(src, dst, anchor, iterations, borderType, borderValue)
8.5 顶帽操作(cv.morph_tophat)
算子名称 | cv.morph_close | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
cv::Mat | dst | 结果图像 | |
cv::Point | anchor | 锚点的位置 | |
int | iterations | 迭代次数 | |
int | borderType | 边界模式 | |
cv::Scalar | borderValue | 边缘值 | |
返回值 | cv::Mat | 顶帽操作处理后图像 | |
功能描述 | 源图像减开操作图像,得到比源图像更亮的环绕部分 |
脚本示例:
src = thre_img --二值化结果图像
dst = toph_img
anchor = point(-1, -1)
iterations = 2
borderType = BORDER_CONSTANT
borderValue = morphologyDefaultBorderValue()
toph_img = cv.morph_toph(src, dst, anchor, iterations, borderType, borderValue)
8.6 黑帽操作(cv.morph_blackhat)
算子名称 | cv.morph_close | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
cv::Mat | dst | 结果图像 | |
cv::Point | anchor | 锚点的位置 | |
int | iterations | 迭代次数 | |
int | borderType | 边界模式 | |
cv::Scalar | borderValue | 边缘值 | |
返回值 | cv::Mat | 黑帽操作处理后图像 | |
功能描述 | 闭操作图像减源图像,得到比源图像更暗的环绕部分 |
脚本示例:
src = thre_img --二值化结果图像
dst = bckh_img
anchor = point(-1, -1)
iterations = 2
borderType = BORDER_CONSTANT
borderValue = morphologyDefaultBorderValue()
bckh_img = cv.morph_bckh(src, dst, anchor, iterations, borderType, borderValue)
8.7 HMT变换(cv.morph_hitmiss)
算子名称 | cv.morph_close | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
cv::Mat | dst | 结果图像 | |
cv::Point | anchor | 锚点的位置 | |
int | iterations | 迭代次数 | |
int | borderType | 边界模式 | |
cv::Scalar | borderValue | 边缘值 | |
返回值 | cv::Mat | HMT变换操作处理后图像 | |
功能描述 | 用来检测特定形状所处位置的一个基本工具 |
脚本示例:
src = thre_img --二值化结果图像
dst = hmt_img
anchor = point(-1, -1)
iterations = 2
borderType = BORDER_CONSTANT
borderValue = morphologyDefaultBorderValue()
hmt_img = cv.morph_hmt(src, dst, anchor, iterations, borderType, borderValue)
9.分割
9.1 填充区域分割(cv.mask_cut)
算子名称 | cv.mask_cut | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
cv::Rect | r1 | 矩形填充区域 | |
bool | negative | 保留或剔除分割部分 | |
返回值 | cv::Mat | 模糊图像 | |
功能描述 | 对填充区域进行切割 |
脚本示例:
src = image
r1 = cv.Rect2f(0, 0, 0.75, 0.25)
negative = true
cut_img = cv.mask_cut(src, r1, negative)
10.提取
10.1 HSV阈值提取(cv.inRange)
算子名称 | cv.inRange | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | src | 输入图像 |
cv::Scalar | &lowerb | 下限阈值 | |
cv::Scalar | $upperb | 上限阈值 | |
返回值 | cv::Mat | 模糊图像 | |
功能描述 | 通过颜色阈值,提取指定阈值范围内的区域 |
脚本示例:
range_img = cv.inRange(hsv_img, cv.Scalar(10, 43, 46), cv.Scalar(25, 255, 255))
11.OpenCV数学计算
11.1 轮廓面积计算
类名称 | cv.contourArea | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
属性列表 | contours | contour | 已查找出的轮廓 |
返回值 | double | 面积值(像素面积) | |
功能描述 | 计算已找出轮廓的面积 |
脚本示例
area_cnt = cv.contourArea(contour)
12.OpenCV基础类型
12.1 矩形类(cv.Rect2f)
类名称 | cv.Rect2f | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
属性列表 | float | xmin | x轴最小值(x轴起始坐标) |
float | ymin | y轴最小值(y轴起始坐标) | |
float | width | 矩形宽度 | |
float | height | 矩形高度 | |
成员函数 | cv::Rect2f | 定义的矩形 | |
功能描述 | 指定矩形位置及大小(以上参数数值,均为相对百分数值,非绝对像素值) |
脚本示例
xmin = 0.14
ymin = 0.0
width = 0.03
height = 1.0
rect = cv.Rect2f(xmin, ymin, width, height)
12.2 点类 — 浮点型(cv.Point2f)
类名称 | cv.Point2f | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
属性列表 | float | xmin | x轴最小值(x轴起始坐标) |
float | ymin | y轴最小值(y轴起始坐标) | |
成员函数 | cv::Point2f | Point2f类型的点 | |
功能描述 | 指定矩形顶点坐标确定位置及大小 |
脚本示例:
xmin = rect.x
ymin = 0.0
cv.Point2f(rect.x, 0.0)
12.3 点类 — 整型(cv.Point2i)
类名称 | cv.Point2i | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
属性列表 | int | x | 横坐标 |
int | y | 纵坐标 | |
成员函数 | cv::Point2i | Point2i类型的点 | |
功能描述 | 将矩形按指定参数平移,确定感兴趣区域 |
脚本示例:
x = rect.br.x --指定矩形右下角顶点横坐标值
y = 0 --纵坐标值
cv.Point2i(rect.br.x + 20, 0)
13.OpenCV类型转换
13.1 数据类型转换(cv.convertTo)
算子名称 | cv.convertTo | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | image | 图片 |
int | rtype | 目标类型 | |
返回值 | cv::Mat | 处理后图像 | |
功能描述 | 转换图片的位深度与通道数 |
脚本示例:
img = cv.convertTo(img, cv.Mat.CV_8UC3)
13.2 数据类型转换(cv.convertToHSV)
算子名称 | cv.convertToHSV | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | cv::Mat | image | 图片 |
返回值 | cv::Mat | 处理后图像 | |
功能描述 | 将RGB格式图片转换为HSV格式图片(一般用于颜色提取) |
脚本示例:
HSV_img = cv.convertToHSV(img)