当前位置: 首页 > news >正文

15.图像 模板轮廓检测

模板匹配时,模板需要比原图小,或者缩小原图(缩小原图下次讲)

模板匹配算法    OpenCV模板匹配算法详解 - weiwei22844 - 博客园

import cv2
from matplotlib import pyplot as plt#导入 Matplotlib 库中的 pyplot 模块,并命名为 plt。#Matplotlib 是一个强大的绘图库,常用于绘制图表和图像显示。#就是窗口# OpenCV	BGR(Blue, Green, Red)# Matplotlib	RGB(Red, Green, Blue)
import numpy as np  #导入 NumPy 库,并命名为 np。#NumPy 提供了多维数组对象及各种派生对象(如掩模数组),并且包含大量用于数组快速操作的函数。# 如果图像不在脚本所在目录,请提供完整路径
img1_t =  cv2.imread(r"D:/Professional software package(new)/VS Projects/OPenCv/Picture/IMG_20231230_171718.jpg")#使用 OpenCV 函数读取图像文件。
img2_t= cv2.imread(r"D:/Professional software package(new)/VS Projects/OPenCv/Picture/202310281019103.jpg")                                        #它返回的是一个 NumPy 数组,其中包含了图像的像素数据。如果没有找到图像或路径错误,img 将是 None。
img3_t= cv2.imread(r"D:/Professional software package(new)/VS Projects/OPenCv/Picture/maoci1.jpg")                                        #它返回的是一个 NumPy 数组,其中包含了图像的像素数据。如果没有找到图像或路径错误,img 将是 None。# 检查图片是否成功加载
if img1_t is None:print("Error: 图像1加载失败,请检查文件路径和文件权限。")
elif img2_t is None:        print("Error: 图像2加载失败,请检查文件路径和文件权限。")
elif img3_t is None:        print("Error: 图像3加载失败,请检查文件路径和文件权限。")
else:# 将 BGR 图像转换为 RGB 图像以供 matplotlib 正确显示print(" 图像加载成功!")img1_rgb = cv2.cvtColor(img1_t, cv2.COLOR_BGR2RGB)#由于 OpenCV 默认使用 BGR 格式来存储图像数据,而大多数其他图像处理工具(包括 Matplotlib)使用 RGB 格式。                                    #因此,在用 Matplotlib 显示图像之前,我们需要将图像从 BGR 格式转换为 RGB 格式。img3_rgb = cv2.cvtColor(img3_t, cv2.COLOR_BGR2RGB)img2_rgb = cv2.cvtColor(img2_t, cv2.COLOR_BGR2RGB)                                                 #RGB 和 BGR 只是颜色通道的不同排序#添加函数 图片展示函数
def CV_Show(name,img,time,percent): scale_percent = percent  # 百分比width = int(img.shape[1] * scale_percent / 100)     #shape[1]:图片的宽度height = int(img.shape[0] * scale_percent / 100)    #shape[0]:图片的高度dim = (width, height)#格式为 (width, height)resized_img = cv2.resize(img, dim,interpolation=cv2.INTER_AREA)cv2.imshow(name, resized_img)cv2.waitKey(time*1000)#显示多少秒  cv2.destroyAllWindows()#***************预处理************
img2_gray=cv2.cvtColor(img2_rgb,cv2.COLOR_BGR2GRAY)#转化为灰白图  
img2_gray_ret,img2_gray_dst=cv2.threshold(img2_gray,150,255,cv2.THRESH_BINARY)#返回参数分别为  返回阈值,返回图片
#CV_Show("img2_img2_gray_dstgray",img2_gray_dst,3,50)
#********************************contours,hierarchy=cv2.findContours(img2_gray_dst,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
#取轮廓必须为灰白图
# contours: 找到的所有轮廓,每个轮廓是一个包含 x,y 坐标的数组。
# hierarchy: 每个轮廓对应的层次信息。这是一个数组,每个元素有 4 个整数,分别表示:
# 下一个同级轮廓的索引
# 上一个同级轮廓的索引
# 第一个子轮廓的索引
# 包含当前轮廓的第一个父轮廓的索引# 第2个输入值:mode: 轮廓检索模式
# 常用选项:
# cv2.RETR_EXTERNAL: 只检索最外层的轮廓。
# cv2.RETR_LIST: 检索所有轮廓但不创建任何层次关系。
# cv2.RETR_CCOMP: 检索所有轮廓并将它们组织成两级层次结构,即外部轮廓和孔洞。
# cv2.RETR_TREE: 检索所有轮廓并重建完整的层级结构。(常用)# 第1个输入值method: 轮廓近似方法
# 常用选项:
# cv2.CHAIN_APPROX_NONE: 存储所有的轮廓点。这意味着每个点都会被存储下来,这可能会占用较多内存。
# cv2.CHAIN_APPROX_SIMPLE: 压缩水平、垂直和对角方向的点,只保留端点。例如,一个矩形轮廓只需要存储四个顶点。
# 其他选项还包括 cv2.CHAIN_APPROX_TC89_L1, cv2.CHAIN_APPROX_TC89_KCOS 等,这些是基于Teh-Chin链逼近算法的方法。#绘制图片
#传入绘制图片,轮廓,轮廓索引,颜色模式,线条厚度
#注意输入图片的copy,不然原图会变
draw_img=img2_gray_dst.copy()
res=cv2.drawContours(draw_img,contours,-1,(0,0,255),2)#可以传入彩色图,但轮廓参数必须为黑白
#图取得
CV_Show("res",res,3,50)
# 在图像 draw_img 上绘制轮廓。
# 参数详解:
# 参数	               含义
# draw_img	要绘制轮廓的原始图像(通常是彩色图像,3通道)
# contours	由 cv2.findContours() 找到的轮廓列表
# -1	        表示绘制所有轮廓(若为 0 则只绘制第一个轮廓)
# (0, 0, 255)	颜色,表示红色(BGR 格式)
# 2	        线宽,轮廓线的粗细(单位:像素)
# 返回值:
# res:绘制了轮廓的新图像。

http://www.xdnf.cn/news/1129339.html

相关文章:

  • Unity音游开发全指南:模板与免费资源高效构建节奏游戏
  • Kafka——生产者消息分区机制原理剖析
  • 基于STM32与中航ZH-E3L字符卡通信在LED屏显示数据
  • 排序算法实战(上)
  • GitHub Pages+Jekyll 静态网站搭建(二)
  • 自增主键为什么不是连续的?
  • 华为敏态开发流程敏捷开发费用估算敏态IT财务分析模板
  • flutter下的webview适配rem问题
  • 详解低速容错CAN(附与高速CAN对比表)
  • 三种深度学习模型(LSTM、CNN-LSTM、贝叶斯优化的CNN-LSTM/BO-CNN-LSTM)对北半球光伏数据进行时间序列预测
  • 指数加权的公式推导
  • 大语言模型:高考志愿填报的“新纪元智能参谋”
  • 鸿蒙和Android知识点
  • wkhtmltopdf导出pdf调试参数
  • golang语法-----变量、常量
  • Ubuntu 22.04 安装 mysql-server与 postgreSQL 服务端
  • AI助手指南:从零开始打造Python学习环境(VSCode + Lingma/Copilot + Anaconda + 效率工具包)
  • 倒计时熔断机制的出价逻辑
  • 711SJBH构建制造业信息化人才培训体系的对策-开题报告
  • 【LeetCode Solutions】LeetCode 181 ~ 185 题解
  • 深度学习图像增强方法(一)
  • 编程项目选择思考点以及项目包装的关键点
  • 3-Nodejs-使用fs文件系统模块
  • uniapp打包成 apk
  • 在百亿流量面前,让“不存在”无处遁形——Redis 缓存穿透的极限攻防实录
  • 原点安全签约金网络数科,共建一体化数据安全防护体系
  • 设计模式二:策略模式 (Strategy Pattern)
  • AiPy+豆包:数据分析可视化,一键生成GUI工具
  • Vue.js 动画与过渡:让你的界面“活”起来,提升用户体验的视觉魔法!
  • : $ operator is invalid for atomic vectors