网站无法上传图片,网站案例欣赏,河南工程建设信息网官网 可登录中项网,北京网站开发哪家好接上篇#xff1a;《Opencv》基础操作详解#xff08;4#xff09;-CSDN博客
目录
接上篇#xff1a;《Opencv》基础操作详解#xff08;4#xff09;-CSDN博客
25、轮廓近似
简介
接口用法
参数说明
返回值 代码示例
结果展示
26、轮廓最小外接圆
简介
接口用…接上篇《Opencv》基础操作详解4-CSDN博客
目录
接上篇《Opencv》基础操作详解4-CSDN博客
25、轮廓近似
简介
接口用法
参数说明
返回值 代码示例
结果展示
26、轮廓最小外接圆
简介
接口用法
参数说明
返回值
画圆函数
参数说明
代码示例
结果展示
27、轮廓最小外接矩形
简介
接口用法
参数说明
返回值
画矩形函数
参数说明
代码示例
结果展示
28、模板匹配 简介
接口用法
参数说明
返回值
处理返回值 cv2.minMaxLoc
参数说明
返回值
代码示例
结果展示
总结 25、轮廓近似
简介 轮廓近似是指使用多边形来近似轮廓的形状。这个过程可以减少轮廓的顶点数量从而简化轮廓的表示。OpenCV提供了cv2.approxPolyDP函数来实现这一功能。 接口用法
cv2.approxPolyDP(curve, epsilon, closed)
参数说明 curve: 输入的轮廓通常是一个由点组成的数组。 epsilon: 近似精度。这是原始轮廓与近似轮廓之间的最大距离。较小的值会得到更精确的近似而较大的值会得到更简化的近似。 closed: 一个布尔值表示轮廓是否是闭合的。如果为 True则函数会假设轮廓是闭合的。
返回值 返回一个近似的轮廓它是一个由点组成的数组。 代码示例
import cv2
img cv2.imread(./images/img_2.png)
# 转换灰度图
img_gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
img_thresh cv2.threshold(img_gray, 120, 255, cv2.THRESH_BINARY)[1]
# 寻找轮廓
contours cv2.findContours(img_thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)[-2]
area [(cnt,cv2.contourArea(cnt)) for cnt in contours]
# area []
# for i in contours:
# a cv2.contourArea(i)
# area.append((i,a))
# 将轮廓进行排序方便找出想要处理的轮廓
sorted_contours sorted(area,keylambda x: x[1],reverseTrue)
aa sorted_contours[1][0]
# 设置精度
epsilon 0.005*cv2.arcLength(aa,True)
# 根据轮廓进行近似
approx cv2.approxPolyDP(aa,epsilon,True)
print(approx.shape)
img_n img.copy()
# 画出近似后的轮廓
image_contours cv2.drawContours(img_n, [approx], contourIdx-1, color(0, 255, 0), thickness2)
cv2.imshow(img, img)
cv2.waitKey(0)
cv2.imshow(image_contours,image_contours)
cv2.waitKey(0)结果展示 26、轮廓最小外接圆
简介 轮廓的外接圆是指能够完全包围轮廓的最小圆。OpenCV 提了 cv2.minEnclosingCircle 函数来计算轮廓的外接圆。 接口用法
center, radius cv2.minEnclosingCircle(points)
参数说明 points: 输入的轮廓点集通常是一个由点组成的数组例如轮廓的坐标点。
返回值 center: 外接圆的圆心坐标格式为 (x, y)。 radius: 外接圆的半径。
画圆函数
cv2.circle(img, center, radius, color, thickness)
参数说明 img: 要绘制圆的图像。 center: 圆心坐标格式为 (x, y)。 radius: 圆的半径。 color: 圆的颜色格式为 (B, G, R)。 thickness: 圆的线宽。如果为负数如 -1则表示填充圆。
代码示例
import cv2
img cv2.imread(./images/img_2.png)
# 转换灰度图
img_gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
img_thresh cv2.threshold(img_gray, 120, 255, cv2.THRESH_BINARY)[1]
# 寻找轮廓
contours cv2.findContours(img_thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)[-2]
外接圆
img1 img.copy()
(x,y),r cv2.minEnclosingCircle(contours[247])
print((x,y),r)
img_cirle cv2.circle(img1,(int(x),int(y)),int(r),color(0,255,255),thickness2)
cv2.imshow(cirle,img_cirle)
cv2.waitKey(0)
结果展示 27、轮廓最小外接矩形
简介 轮廓的最小外接矩形是指能够完全包围轮廓的最小面积的矩形。这个矩形可以是任意角度的即不一定是轴对齐的。OpenCV 提供了 cv2.minAreaRect 函数来计算轮廓的最小外接矩形。 接口用法
rect cv2.minAreaRect(points)
参数说明 points: 输入的轮廓点集通常是一个由点组成的数组例如轮廓的坐标点。
返回值 rect: 一个旋转矩形格式为 ((center_x, center_y), (width, height), angle)。 (center_x, center_y): 矩形的中心点坐标。 (width, height): 矩形的宽度和高度。 angle: 矩形的旋转角度以度为单位范围是 [-90, 0]。
画矩形函数
cv2.rectangle(img, pt1, pt2, color, thickness)
参数说明 img: 要绘制矩形的图像。 pt1: 矩形的左上角坐标格式为 (x, y)。 pt2: 矩形的右下角坐标格式为 (x, y)。 color: 矩形的颜色格式为 (B, G, R)。 thickness: 矩形的线宽。如果为负数如 -1则表示填充矩形。
代码示例
import cv2
img cv2.imread(./images/img_2.png)
# 转换灰度图
img_gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
img_thresh cv2.threshold(img_gray, 120, 255, cv2.THRESH_BINARY)[1]
# 寻找轮廓
contours cv2.findContours(img_thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)[-2]外接矩阵
img2 img.copy()
# 找出矩形左上角位置以及宽和高
x,y,w,h cv2.boundingRect(contours[247])
img_rectangle cv2.rectangle(img2,(x,y),(xw,yh),color(255,0,255),thickness2)
cv2.imshow(rectangle,img_rectangle)
cv2.waitKey(0)
结果展示 28、模板匹配 简介 模板匹配Template Matching是图像处理中的一种技术用于在图像中查找与给定模板图像最匹配的区域。OpenCV 提供了 cv2.matchTemplate 函数来实现模板匹配。 模板匹配通过在输入图像上滑动模板图像并计算每个位置的相似度通过特定的匹配方法找到与模板最相似的位置。 接口用法
result cv2.matchTemplate(image, template, method)
参数说明 image: 输入图像大图像。 template: 模板图像小图像。 method: 匹配方法常用的方法包括 cv2.TM_SQDIFF: 平方差匹配法。 cv2.TM_SQDIFF_NORMED: 归一化平方差匹配法。 cv2.TM_CCORR: 相关匹配法。 cv2.TM_CCORR_NORMED: 归一化相关匹配法。 cv2.TM_CCOEFF: 相关系数匹配法。 cv2.TM_CCOEFF_NORMED: 归一化相关系数匹配法。
返回值 result: 匹配结果矩阵表示每个位置的匹配程度。矩阵的大小为 (W - w 1, H - h 1)其中 (W, H) 是输入图像的大小(w, h) 是模板图像的大小。
处理返回值 cv2.minMaxLoc
min_val, max_val, min_loc, max_loc cv2.minMaxLoc(result)
参数说明 result: 输入数组通常是匹配结果矩阵。
返回值 min_val: 数组中的最小值。 max_val: 数组中的最大值。 min_loc: 最小值的位置格式为 (x, y)。 max_loc: 最大值的位置格式为 (x, y)。
代码示例
import cv2
kele cv2.imread(./images/kele.png)
template cv2.imread(./images/template.png)
cv2.imshow(kele,kele)
cv2.imshow(template,template)
cv2.waitKey(0)
# 获取图标的高和宽
h,w template.shape[:2]
# 匹配
res cv2.matchTemplate(kele,template,cv2.TM_CCOEFF_NORMED)
# 对匹配结果进行处理
# max_loc为左上角坐标
min_val,max_val,min_loc,max_loc cv2.minMaxLoc(res)
# 计算右下角坐标
bottom_right (max_loc[0]w,max_loc[1]h)
# 根据左上角和右下角坐标绘制矩阵
kele_template cv2.rectangle(kele,max_loc,bottom_right,color(255,100,100),thickness2)
cv2.imshow(kele_template,kele_template)
cv2.waitKey(0)
结果展示 总结
以上是 OpenCV 的基础操作总结涵盖了图像处理的大部分常用功能。掌握这些操作后你可以进一步学习更高级的图像处理技术如特征检测、目标跟踪、深度学习等。OpenCV 是一个非常强大的工具库适合用于计算机视觉、图像处理和机器学习等领域。