利用opencv进行多目标模板匹配,只要是利用其matchTemplate函数,但在多目标(这里是讨论目标图片中不同大小模板的匹配),以下贴出代码和图片,供大家参考:

#include

#include

#include

#include

#include

using namespace std;

using namespace cv;

Point getNextMinLoc(Mat &result, Point minLoc, int maxValue, int templatW, int templatH);

int main(void)

{

Mat src = imread("1_2.png");

Mat srcCopy = src.clone();

Mat temp = imread("1_4.png");

Mat result;

if (src.empty() || temp.empty())

{

cout << "打开图片失败" << endl;

return 0;

}

vector templat;

vector minV;

vector minL;

int srcW, srcH, templatW, templatH, resultH, resultW;

srcW = src.cols;

srcH = src.rows;

templat.push_back(temp);

double minValue, maxValue;

Point minLoc, maxLoc;

for (int i=0;i<10;i++)

{

cout << i << ": ";

templatW = templat[i].cols;

templatH = templat[i].rows;

if (srcW < templatW || srcH < templatH)

{

cout << "模板不能比原图大" << endl;

return 0;

}

resultW = srcW - templatW + 1;

resultH = srcH - templatH + 1;

result.create(Size(resultW, resultH), CV_32FC1);

matchTemplate(src, templat[i], result, CV_TM_SQDIFF_NORMED);

minMaxLoc(result, &minValue, &maxValue, &minLoc, &maxLoc);

cout << "min1: " << minValue << endl;

if (minValue<=0.070055)

{

rectangle(srcCopy, minLoc, Point(minLoc.x + templatW, minLoc.y + templatH), Scalar(0, 0, 255), 2, 8, 0);

Point new_minLoc;

new_minLoc = getNextMinLoc(result, minLoc, maxValue, templatW, templatH);

float *data = result.ptr(new_minLoc.y);

cout << "min2: " << data[new_minLoc.x] << " ";

if (data[new_minLoc.x]<=0.5)

{

cout << "进这个函数了:" << i << ":" << new_minLoc.x;

cout << " " << new_minLoc.y;

rectangle(srcCopy, new_minLoc, Point(new_minLoc.x + templatW, new_minLoc.y + templatH),

Scalar(0, 255, 0), 2, 8, 0);

new_minLoc = getNextMinLoc(result, new_minLoc, maxValue, templatW, templatH);

}

float *data1 = result.ptr(new_minLoc.y);

cout << "min3: " << data1[new_minLoc.x] << " " << endl;

if (data1[new_minLoc.x] <= 0.4)

{

rectangle(srcCopy, new_minLoc, Point(new_minLoc.x + templatW, new_minLoc.y + templatH),

Scalar(255, 0, 0), 2, 8, 0);

}

}

cout << "#" << endl;

Mat temp_templat;

resize(templat[i], temp_templat, Size(templat[i].cols / 1.1, templat[i].rows / 1.1));

templat.push_back(temp_templat);

}

imshow("结果", srcCopy);

waitKey(0);

return 0;

}

Point getNextMinLoc(Mat &result, Point minLoc, int maxValue, int templatW, int templatH)

{

//imshow("result", result);

//cout << "maxvalue: " << maxValue << endl;

int startX = minLoc.x - templatW / 3;

int startY = minLoc.y - templatH / 3;

int endX = minLoc.x + templatW / 3;

int endY = minLoc.y + templatH / 3;

if (startX < 0 || startY < 0)

{

startX = 0;

startY = 0;

}

if (endX > result.cols - 1 || endY > result.rows - 1)

{

endX = result.cols - 1;

endY = result.rows - 1;

}

int y, x;

for (y = startY; y < endY; y++)

{

for (x = startX; x < endX; x++)

{

float *data = result.ptr(y);

data[x] = maxValue;

}

}

double new_minValue, new_maxValue;

Point new_minLoc, new_maxLoc;

minMaxLoc(result, &new_minValue, &new_maxValue, &new_minLoc, &new_maxLoc);

//imshow("result_end", result);

return new_minLoc;

}

以下是结果图:

python opencv模板匹配多目标_基于opencv的多目标模板匹配相关推荐

  1. python读取视频流做人脸识别_基于OpenCV和Keras实现人脸识别系列——二、使用OpenCV通过摄像头捕获实时视频并探测人脸、准备人脸数据...

    基于OpenCV和Keras实现人脸识别系列手记: 项目完整代码参见Github仓库. 本篇是上面这一系列手记的第二篇. 在Opencv初接触,图片的基本操作这篇手记中,我介绍了一些图片的基本操作,而 ...

  2. opencv jpg作为png背景_基于OpenCV与tensorflow实现实时手势识别

    公众号[OpenCV学堂],致力于计算机视觉开发技术传播,原创技术文章200+的,涉及OpenCV开发.tensorflow开发.模型解析与训练.传统图像处理算法解析,对图像与视觉感兴趣的强烈推荐关注 ...

  3. 图像目标检索:基于Opencv的颜色空间匹配法

    图像目标检索:基于Opencv的颜色空间匹配法 目标效果:近似于淘宝上--拍照搜索,检索商品的效果,在传统算法领域,也有一些优秀的算法能粗略的实现该效果,本文便基于传统算法中的颜色空间匹配法来实现,代 ...

  4. python实现流媒体传输_基于OpenCV的网络实时视频流传输的实现

    很多小伙伴都不会在家里或者办公室安装网络摄像头或监视摄像头.但是有时,大家又希望能够随时随地观看视频直播. 大多数人会选择使用IP摄像机(Internet协议摄像机)而不是CCTV(闭路电视),因为它 ...

  5. mask rcnn属于dnn么_基于OpenCV DNN的 MaskRCNN 目标检测与实例分割

    这里主要记录基于 OpenCV 4.x DNN 模块和 TensorFlow MaskRCNN 开源模型的目标检测与实例分割 的实现. MaskRCNN 不仅可以检测图片或视频帧中的物体边界框,还可以 ...

  6. python运动目标检测与跟踪_基于OpenCV的运动目标检测与跟踪

    尹俊超,刘直芳:基于 OpenCV 的运动目标检测与跟踪 2011, V ol.32, No.8 2817 0 引 言 运动目标检测跟踪技术在航空航天遥感. 生物医学. 工业 自动化生产. 军事公安目 ...

  7. python成绩统计及格学平成_基于深度学习的目标检测算法综述

    导言目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一.由于各类物体有不同的外观,形状,姿态,加上成像时光照,遮挡等因素的干扰,目标检测一直是机器视 ...

  8. opencv python考勤_基于opencv和dlib人脸识别的员工考勤系统

    已打包生成可执行文件exe,可直接下载运行,exe文件及代码均已上传到我的github,点击传送门,打包的具体过程及教程可见pyinstaller简明教程 WorkAttendanceSystem 一 ...

  9. python dlib caffe人脸相似度_基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【一】如何配置caffe属性表...

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

最新文章

  1. python pip升级 指向不同python版本
  2. NOIP 2017 提高组 K: 奶酪 (SPFA || 并查集)
  3. 面试之作用域链与闭包
  4. oracle创建用户需要什么权限,Oracle 创建普通用户,并赋予权限
  5. 内置类型存储空间(32位机参考)
  6. 论文浅尝 | 基于图注意力的常识对话生成
  7. 【数据结构算法】二:上三角、下三角中求数组地址--【下标的计算】
  8. 邓俊辉数据结构学习-7-BST
  9. C语言指针的高级操作
  10. 利用kd树实现最近邻搜索
  11. 免费计算机网络同传系统,使用网络同传功能批量完成系统安装
  12. 因接外包坐牢456天,我都经历了什么?
  13. 插入数据 java_JAVA插入数据笔记
  14. itextpdf生成pdf,指定样式及文字水印
  15. 苹果6s最大屏幕尺寸_苹果 iPhone 12 Pro DXOMARK 屏幕评分 87 分,最大问题是黄色色偏 - 苹果,iPhone...
  16. Photon网络中Player中存取数据
  17. [C++基础]强制转换运算符dynamic_cast
  18. 【嵌入式开发】 Linux Kernel 下载 配置 编译 安装 及 驱动简介
  19. 关于CNN中出现的诸如conv4_3、conv8_2、conv7等标识的含义
  20. 百度搜索引擎排名规则都有哪一些?

热门文章

  1. 关闭体眠可释放系统盘的空间
  2. C#网页自动登录和提交POST信息的多种方法
  3. Unable to instantiate Action, MenuAction, defined for 'QueryMenuAll' in namespace '/'MenuAction
  4. [转]《JAVA与模式》之责任链模式
  5. 判断二叉树中两个节点的最低共同父节点
  6. 此博客作废,请访问http://www.cnblogs.com/default
  7. 网络扫描信息收集基于(Windows)
  8. 【勘误】第4章字符串的实现
  9. 爬虫豆瓣top250项目-开发文档
  10. Ubuntu(Linux) 下 unzip 命令使用详解