opencv 模板匹配形状匹配

article/2025/11/9 18:40:02

文章目录

    • 1. 找圆垫子
      • 1.1 得到模板
      • 1.2 形状匹配
    • 2. 找瓜子

这是第四次作业要求

image-20220428142137548

所以今天就趁机会讲讲模板匹配,正好之前的项目有一部分重要工作就是和模板匹配紧密相关,对于今天作业来说,之前的项目难度更大,因为涉及到许多要考虑的因素,还要考虑效率实时性等问题。太详细的我也不方便展开,下面先看看之前的效果

17_50_13_9

17_50_13_9

当然也有其他的车型,视频就不放了直接上结果图

18_00_13_1

17_50_13_3

17_50_13_8

现在就正式开始解决今天这个作业

1. 找圆垫子

9_1

在上面视频拼车里模板都是在每一帧中取得,并且为了模板匹配能匹配得上还要预处理每一帧图片,调整模板区域、大小以及匹配方法。但是在拼车中我们只需要匹配一次,而作业中明显是需要多目标匹配的,并且待匹配目标的角度差异很大,在这种情况下使用opencv中的matchTemplate()效果肯定很差,至于为什么这可以从原理上解释。

image-20220428193221641

有兴趣的可以去看看相关资料,我就根据上图简单来说说模板匹配流程

  1. 得到原图和模板
  2. 滑动模板,与原图作对比
  3. 比较依据也就是评价指标如下图

image-20220428193436767

平方差方法匹配值越小越好,相关性方法匹配值越大越好,这样就会得到一个result矩阵,其中有最亮/最暗的地方就是我们匹配到的地方。利用minMaxLoc()找到这些地方,那也就代表找到了待匹配目标。

但是,我在上面也说过了,这些待匹配目标和模板的角度差异特别大,你用模板匹配最多也只能匹配出和模板一样大小、方向的待匹配目标。或者利用一堆复杂的操作,把模板图片进行角度变换搞一个任意角度都有的模板组然后再一一匹配,这个倒是可行,但是效率上不敢说。所以干脆换一种思路,不用模板匹配而是用形状去匹配。

匹配嘛就是根据相似性进行比较,上面已经说了因为角度导致模板匹配失效,那就得想办法排除掉角度干扰,最容易想到的就是利用某些角度不变特性的算子,所以很自然就想到HuMoments,关于Hu不变矩可以看看opencv的解释

image-20220428195311262

利用归一化中心矩构造了不变特征矩,这个对于平移,旋转都可以保持不变性,这不就是我们需要的吗?然后利用这个开始实现作业。

image-20220428195703459

image-20220428195730804

这是opencv中形状匹配的函数以及参数,我之前也没用过所以放在这一起学习一下。

1.1 得到模板

我们只有原图,并没有模板图。自己想去截图但是待匹配图之间挨得比较近,截下来的模板图不太容易找轮廓,因此直接在待匹配图操作,找到其中一个的轮廓作为模板。

vector<Point> TemplateContours(Mat img_template)
{//灰度化Mat gray_img_template;cvtColor(img_template, gray_img_template, COLOR_BGR2GRAY);//二值化Mat thresh_img_template;threshold(gray_img_template, thresh_img_template, 0, 255, THRESH_OTSU);imshow("b", thresh_img_template);//膨胀处理Mat ellipse = getStructuringElement(MORPH_ELLIPSE, Size(15, 15));morphologyEx(thresh_img_template, thresh_img_template, MORPH_OPEN, ellipse, Point(-1, -1), 1);//寻找边界vector<vector<Point>> contours_template;vector<Vec4i> hierarchy;findContours(thresh_img_template, contours_template, hierarchy,RETR_LIST, CHAIN_APPROX_SIMPLE, Point());//绘制边界,查看是否是我们的目标轮廓drawContours(img_template, contours_template, 0, Scalar(0, 0, 255), 1, 8, hierarchy);imshow("img_template", img_template);waitKey(0);return contours_template[0];
}

image-20220428200330063

1.2 形状匹配

那个红色的圈就是每个圆形垫子的共有特征,然后根据这个圈作为模板轮廓对图像进行形状匹配,并根据设定的阈值排除掉不是相同形状物体的干扰。

void ShapeTemplateMatch(Mat image, vector<Point> imgTemplatecontours, double thresh)
{//灰度化Mat gray_img;cvtColor(image, gray_img, COLOR_BGR2GRAY);//二值化Mat thresh_img;threshold(gray_img, thresh_img, 0, 255, THRESH_OTSU);//寻找边界vector<vector<Point>> contours_img;vector<Vec4i> hierarchy;findContours(thresh_img, contours_img, hierarchy, RETR_LIST, CHAIN_APPROX_NONE, Point());//根据形状模板进行匹配int min_pos = -1;for (int i = 0; i < contours_img.size(); i++){//计算轮廓面积,筛选掉一些没必要的小轮廓// 根据计算面积以及可视化结果确定下面的阈值//cout << contourArea(contours_img[i]) << endl;if (contourArea(contours_img[i]) > 120){//进行形状匹配,形状越相似value越小double value = matchShapes(contours_img[i], imgTemplatecontours, CONTOURS_MATCH_I3, 0.0);//查看value以及边界图得到thresh阈值//cout << value << endl;//将匹配分值与设定阈值比较 if (value < thresh){min_pos = i;//绘制目标边界drawContours(image, contours_img, min_pos, Scalar(0, 255,0), 5, 8, hierarchy, 0);imshow("1", image);}}}waitKey(0);
}

image-20220428200455886

2. 找瓜子

9_2

和上面的函数一样,只是改了一下阈值

int main() {Mat src = imread("D:/9_2.jpg");resize(src, src, Size(src.cols / 4, src.rows / 4));vector<Point> tempContours =TemplateContours(src.clone());//圆垫阈值0.03,瓜子阈值0.2ShapeTemplateMatch(src.clone(),tempContours, 0.2);return 0;
}

image-20220428201530908

image-20220428201554768


http://chatgpt.dhexx.cn/article/2orHoGly.shtml

相关文章

Opencv——图像模板匹配

引言 什么是模板匹配呢&#xff1f; 看到这里大家是否会觉得很熟悉的感觉涌上心头&#xff01;在人脸识别是不是也会看见 等等。 模板匹配可以看作是对象检测的一种非常基本的形式。使用模板匹配&#xff0c;我们可以使用包含要检测对象的“模板”来检测输入图像中的对象。 …

OpenCV-模板匹配cv::matchTemplate

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 函数原型 void matchTemplate( InputArray image, InputArray templ,OutputArray result, int method, InputArray mask noArr…

OPENCV多种模板匹配使用对比

前文简单提到模板匹配中的一种&#xff1a;NCC多角度模板匹配&#xff0c;博主结合实际的检测项目&#xff08;已落地&#xff09;发现其准确率和稳定性有待提升&#xff0c;特别是一些复杂背景的图形&#xff0c;又或是模板选取不当都会造成不理想的效果&#xff1b;同时也借鉴…

基于opencv的模板匹配详解

1.什么是模板匹配 在OpenCV教程中这样解释模板匹配&#xff1a; 模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术。这里说的模板是我们已知的小图像&#xff0c;模板匹配就是在一副大图像中搜寻目标。模板就是我们已知的在图中要找的目标&#xff0c;…

OpenCV模板匹配(cv2.matchTemplate)

目录 摘要正文OpenCV模板匹配&#xff08;cv2.matchTemplate&#xff09;什么是模板匹配&#xff1f;OpenCV的 “cv2.matchTemplate” 函数配置开发环境项目结构使用OpenCV实施模板匹配OpenCV模板匹配结果总结 摘要 在本教程中&#xff0c;您将学习如何使用OpenCV和cv2.matchTe…

Opencv (C++)系列学习---模板匹配

目录 1.模板匹配的定义 2.API介绍 3.寻找最优匹配位置&#xff08;匹配后的配套操作&#xff09; 4.具体代码 1.模板匹配的定义 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域&#xff0c;该匹配方法并不是基于直方图&#xff0c;而是使用一个图像块在输入图像…

【OpenCV--模板匹配】

目录 一、模板匹配 1.定义&#xff1a; 2.实现&#xff1a; 二、霍夫线检测 1.原理&#xff1a; 2.实现&#xff1a; 三、霍夫圆检测 1.描述&#xff1a; 2.用法&#xff1a; 一、模板匹配 1.定义&#xff1a; 模板匹配就是在给定的图片中&#xff0c;查找和模板最相似的区域…

OpenCV学习笔记(十一)——模板匹配

模板匹配是指在当前图像A内寻找与图像B最相似的部分&#xff0c;一般将图像A称为输入图像&#xff0c;将图像B称为模板图像。模板匹配的操作方法是将模板图像B在图像A上滑动&#xff0c;遍历所有像素以完成匹配。 OpenCV学习笔记(十一&#xff09; 1. 模板匹配基础2. 多模板匹配…

opencv中的模板匹配

1 匹配函数 opencv 提供了一个专门用于模板匹配的函数 cv::matchTemplate();其调用方式如下&#xff1a; void cv::matchTemplate(cv::InputArray image, // 用于搜索的输入图像, 8U 或 32F, 大小 W-Hcv::InputArray templ, // 用于匹配的模板&#xff0c;和image类型相同&am…

【论文译文】BigGAN

译文仅供参考&#xff01; 原文是pdf&#xff0c;想下载的话可以戳&#xff1a;http://www.gwylab.com/pdf/biggan_chs.pdf

WGAN、WGAN-GP、BigGAN

一、WGAN概述 WGAN论文地址&#xff1a;https://arxiv.org/abs/1701.07875 在这篇论文中&#xff0c;作者研究了不同的测量方法&#xff0c;来描述模型生成样本和证实样本之间分布差距&#xff0c;或者说&#xff0c;不同的散度定义&#xff0c;在对比之后&#xff0c;认为EM…

tf hub bigGan 猫变狗

原文链接: tf hub bigGan 猫变狗 上一篇: tf hub mobile_net 使用 下一篇: tf hub 使用缓存 数据 根据输入的标签和噪声生成指定类别的图片&#xff0c;类似infogan 每次向着目标前进一小步&#xff0c;将其中的过程变化记录下来 import tensorflow as tf import n…

(2018, BigGAN)用于高保真自然图像合成的大规模 GAN 训练

Large scale gan training for high fidelity natural image synthesis 公众号&#xff1a;EDPJ 目录 0. 摘要 1. 简介 2. 背景 3. 扩展 GAN 3.1 使用截断技巧权衡多样性和保真度 3.2 总结 4. 分析 4.1 表征不稳定性&#xff1a;生成器 4.2 表征不稳定性&#xff1…

深度解读DeepMind新作:史上最强GAN图像生成器—BigGAN

在碎片化阅读充斥眼球的时代&#xff0c;越来越少的人会去关注每篇论文背后的探索和思考。 在这个栏目里&#xff0c;你会快速 get 每篇精选论文的亮点和痛点&#xff0c;时刻紧跟 AI 前沿成果。 点击本文底部的「阅读原文」即刻加入社区&#xff0c;查看更多最新论文推荐。 这…

基于飞桨实现BigGAN生成动漫图像——为艺术创作赋能

点击左上方蓝字关注我们 【飞桨开发者说】艾梦&#xff0c;深度学习业余选手&#xff0c;热衷于用AI创造新的可能性&#xff0c;努力探索发现未知的神奇世界。玩AI&#xff0c;我是认真的。 作为学力不足、码力有余的深度学习业余玩家&#xff0c;笔者在工作中忙里偷闲&#xf…

GAN变种介绍 - DCGAN、InfoGAN、CycleGAN、WGAN、Self-Attention GAN、BigGAN

GAN变种介绍 - DCGAN、InfoGAN、CycleGAN、WGAN、Self-Attention GAN、BigGAN 一、DCGAN二、InfoGAN三、CycleGAN四、WGAN五、Self-Attention GAN六、BigGAN 在原始的 GAN 论文中&#xff0c;Ian Goodfellow 从理论层面分析了 GAN 网络的收敛性&#xff0c;并且在多个经典图片数…

基于飞桨PaddlePaddle实现BigGAN生成动漫图像——为艺术创作赋能

作为学力不足、码力有余的深度学习业余玩家&#xff0c;笔者在工作中忙里偷闲&#xff0c;借助AI Studio的免费GPU继续自己对于生成对抗网络落地应用的相关研究。尽管深度学习已在工业生成中广泛应用&#xff0c;但作为研究重头的视觉效果极佳的GAN的图像生成&#xff0c;却在应…

深度学习(四十六)——StarGAN, InfoGAN, ProGAN, StyleGAN, BigGAN, FUNIT, CVAE

StarGAN 论文&#xff1a; 《StarGAN: Unified Generative Adversarial Networksfor Multi-Domain Image-to-Image Translation》 CycleGAN的局限在于&#xff1a;对于两个Domain之间的变换&#xff0c;需要两个G网络。可以想象&#xff0c;当Domain的数量上升时&#xff0c;…

biggan:large scale gan training for high fidelity natural image synthesis

深度解读DeepMind新作&#xff1a;史上最强GAN图像生成器—BigGAN - 知乎本期推荐的论文笔记来自 PaperWeekly 社区用户 TwistedW。由 DeepMind 带来的 BigGAN 可谓是笔者见过最好的 GAN 模型了&#xff0c;这里的 Big 不单单是指模型参数和 Batch 的大&#xff0c;似乎还在暗示…

飞桨PaddlePaddle(论文复现)-BigGAN解读

飞桨PaddlePaddle(论文复现)-BigGAN解读 先来看看效果&#xff08;左上脚为生成的图像&#xff09; 论文在现有GAN的基础上对生成样本的保真度与多样性之间的权衡进行改进 在ImageNet的128*128分辨率下训练&#xff0c;我们的模型&#xff08;BigGANs&#xff09;得到了166…