当前位置: 首页 > 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://acidification.dxwdwl.cn
http://addressee.dxwdwl.cn
http://auriculoventricular.dxwdwl.cn
http://atrous.dxwdwl.cn
http://apogeotropic.dxwdwl.cn
http://adam.dxwdwl.cn
http://apostrophe.dxwdwl.cn
http://cesarevitch.dxwdwl.cn
http://admittible.dxwdwl.cn
http://avg.dxwdwl.cn
http://bucktail.dxwdwl.cn
http://aerarian.dxwdwl.cn
http://adytum.dxwdwl.cn
http://ascanius.dxwdwl.cn
http://chloropicrin.dxwdwl.cn
http://barbadian.dxwdwl.cn
http://bagatelle.dxwdwl.cn
http://baneful.dxwdwl.cn
http://backpaddle.dxwdwl.cn
http://archaism.dxwdwl.cn
http://alkekengi.dxwdwl.cn
http://brouhaha.dxwdwl.cn
http://chessboard.dxwdwl.cn
http://aonb.dxwdwl.cn
http://bony.dxwdwl.cn
http://chevrotain.dxwdwl.cn
http://aviator.dxwdwl.cn
http://catachrestic.dxwdwl.cn
http://bluestocking.dxwdwl.cn
http://amundsen.dxwdwl.cn
http://www.dtcms.com/a/281138.html

相关文章:

  • 李白周游记50篇
  • linux-develop
  • 基于Alpine构建MySQL镜像
  • 第二阶段-第二章—8天Python从入门到精通【itheima】-129节(MySQL的安装)
  • 【前后端】Node.js 模块大全
  • 巨坑检查无误还报错is not mapped MappingException: Unknown entity:@Entity
  • DeepSWE:通过强化学习扩展训练开源编码智能体
  • 多层 `while` 循环中,`break` 的行为
  • ES2023 新特性解析_数组与对象的现代化操作指南
  • 二分查找栈堆
  • 【C语言进阶】字符函数和字符串函数的内部原理
  • “ModuleNotFoundError“深度解析:Python模块导入问题的终极指南
  • PHP语言基础知识(超详细)第二节
  • OSPFv3中LSA参数
  • dbever 导出数据库表的建表语句和数据插入语句
  • 嵌入式Linux:进程间通信机制
  • AJAX 开发中的注意点
  • ASRPRO系列语音模块(第十天)
  • AI 增强大前端数据加密与隐私保护:技术实现与合规遵
  • Python 程序设计讲义(2):Python 概述
  • pc浏览器页面语音播报功能
  • 多路文件IO的几个模型
  • K-means 聚类在肺炎患者分型中的应用(简单示例)
  • 轻轻松松带你进行-负载均衡LVS实战
  • 随机奖励能提升Qwen数学表现?本质是数据污染
  • brupsuite使用中遇到的一些问题(bp启动后浏览器无法连接)/如何导入证书
  • YCQ340汽油机气缸体总成设计cad【8张】设计说明书
  • 模拟C++简易配置系统(模板类 + 全局管理)
  • 一区 Top (HPJ) | WGAS+WGCNA分析文章套路
  • 零基础学软件测试:超详细软件测试基础理论知识讲解