python opencv模板匹配多目标_基于opencv的多目标模板匹配
利用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的多目标模板匹配相关推荐
- python读取视频流做人脸识别_基于OpenCV和Keras实现人脸识别系列——二、使用OpenCV通过摄像头捕获实时视频并探测人脸、准备人脸数据...
基于OpenCV和Keras实现人脸识别系列手记: 项目完整代码参见Github仓库. 本篇是上面这一系列手记的第二篇. 在Opencv初接触,图片的基本操作这篇手记中,我介绍了一些图片的基本操作,而 ...
- opencv jpg作为png背景_基于OpenCV与tensorflow实现实时手势识别
公众号[OpenCV学堂],致力于计算机视觉开发技术传播,原创技术文章200+的,涉及OpenCV开发.tensorflow开发.模型解析与训练.传统图像处理算法解析,对图像与视觉感兴趣的强烈推荐关注 ...
- 图像目标检索:基于Opencv的颜色空间匹配法
图像目标检索:基于Opencv的颜色空间匹配法 目标效果:近似于淘宝上--拍照搜索,检索商品的效果,在传统算法领域,也有一些优秀的算法能粗略的实现该效果,本文便基于传统算法中的颜色空间匹配法来实现,代 ...
- python实现流媒体传输_基于OpenCV的网络实时视频流传输的实现
很多小伙伴都不会在家里或者办公室安装网络摄像头或监视摄像头.但是有时,大家又希望能够随时随地观看视频直播. 大多数人会选择使用IP摄像机(Internet协议摄像机)而不是CCTV(闭路电视),因为它 ...
- mask rcnn属于dnn么_基于OpenCV DNN的 MaskRCNN 目标检测与实例分割
这里主要记录基于 OpenCV 4.x DNN 模块和 TensorFlow MaskRCNN 开源模型的目标检测与实例分割 的实现. MaskRCNN 不仅可以检测图片或视频帧中的物体边界框,还可以 ...
- python运动目标检测与跟踪_基于OpenCV的运动目标检测与跟踪
尹俊超,刘直芳:基于 OpenCV 的运动目标检测与跟踪 2011, V ol.32, No.8 2817 0 引 言 运动目标检测跟踪技术在航空航天遥感. 生物医学. 工业 自动化生产. 军事公安目 ...
- python成绩统计及格学平成_基于深度学习的目标检测算法综述
导言目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一.由于各类物体有不同的外观,形状,姿态,加上成像时光照,遮挡等因素的干扰,目标检测一直是机器视 ...
- opencv python考勤_基于opencv和dlib人脸识别的员工考勤系统
已打包生成可执行文件exe,可直接下载运行,exe文件及代码均已上传到我的github,点击传送门,打包的具体过程及教程可见pyinstaller简明教程 WorkAttendanceSystem 一 ...
- python dlib caffe人脸相似度_基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【一】如何配置caffe属性表...
前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...
最新文章
- python pip升级 指向不同python版本
- NOIP 2017 提高组 K: 奶酪 (SPFA || 并查集)
- 面试之作用域链与闭包
- oracle创建用户需要什么权限,Oracle 创建普通用户,并赋予权限
- 内置类型存储空间(32位机参考)
- 论文浅尝 | 基于图注意力的常识对话生成
- 【数据结构算法】二:上三角、下三角中求数组地址--【下标的计算】
- 邓俊辉数据结构学习-7-BST
- C语言指针的高级操作
- 利用kd树实现最近邻搜索
- 免费计算机网络同传系统,使用网络同传功能批量完成系统安装
- 因接外包坐牢456天,我都经历了什么?
- 插入数据 java_JAVA插入数据笔记
- itextpdf生成pdf,指定样式及文字水印
- 苹果6s最大屏幕尺寸_苹果 iPhone 12 Pro DXOMARK 屏幕评分 87 分,最大问题是黄色色偏 - 苹果,iPhone...
- Photon网络中Player中存取数据
- [C++基础]强制转换运算符dynamic_cast
- 【嵌入式开发】 Linux Kernel 下载 配置 编译 安装 及 驱动简介
- 关于CNN中出现的诸如conv4_3、conv8_2、conv7等标识的含义
- 百度搜索引擎排名规则都有哪一些?
热门文章
- 关闭体眠可释放系统盘的空间
- C#网页自动登录和提交POST信息的多种方法
- Unable to instantiate Action, MenuAction, defined for 'QueryMenuAll' in namespace '/'MenuAction
- [转]《JAVA与模式》之责任链模式
- 判断二叉树中两个节点的最低共同父节点
- 此博客作废,请访问http://www.cnblogs.com/default
- 网络扫描信息收集基于(Windows)
- 【勘误】第4章字符串的实现
- 爬虫豆瓣top250项目-开发文档
- Ubuntu(Linux) 下 unzip 命令使用详解