OpenCV中文网站例程——多目标模板匹配
来源:互联网 发布:js 100 7 编辑:程序博客网 时间:2024/05/06 18:58
多目标模板匹配结果如图——
程序如下——
#include <iostream>
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
using namespace std;
CvPoint getNextMinLoc(IplImage *result, CvPoint minLoc, int maxVaule, int templatW, int templatH)
{
// 先将第一个最小值点附近两倍模板宽度和高度的都设置为最大值防止产生干扰
int startX = minLoc.x - templatW;
int startY = minLoc.y - templatH;
int endX = minLoc.x + templatW;
int endY = minLoc.y + templatH;
if(startX < 0 || startY < 0)
{
startX = 0;
startY = 0;
}
if(endX > result->width - 1 || endY > result->height - 1)
{
endX = result->width - 1;
endY = result->height - 1;
}
int y, x;
for(y = startY; y < endY; y++)
{
for(x = startX; x < endX; x++)
{
cvSetReal2D(result, y, x, maxVaule);
}
}
// 然后得到下一个最小值并且返回
double new_minVaule, new_maxValue;
CvPoint new_minLoc, new_maxLoc;
cvMinMaxLoc(result, &new_minVaule, &new_maxValue, &new_minLoc, &new_maxLoc);
return new_minLoc;
}
int main()
{
IplImage *src = cvLoadImage("E:\\shili\\match_src.jpg", 0);
IplImage *srcResult = cvLoadImage("E:\\shili\\match_src.jpg", 3); //用来显示
IplImage *templat = cvLoadImage("E:\\shili\\match_template.jpg", 0);
IplImage *result; // 用来存放结果
if(!src || !templat)
{
cout << "打开图片失败" << endl;
return 0;
}
int srcW, srcH, templatW, templatH, resultH, resultW;
srcW = src->width;
srcH = src->height;
templatW = templat->width;
templatH = templat->height;
if(srcW < templatW || srcH < templatH)
{
cout << "模板不能比原图小" << endl;
return 0;
}
resultW = srcW - templatW + 1;
resultH = srcH - templatH + 1;
result = cvCreateImage(cvSize(resultW, resultH), 32, 1); // 匹配方法计算的结果最小值为float
cvMatchTemplate(src, templat, result, CV_TM_SQDIFF); //方差最小,匹配最好
double minValue, maxValue;
CvPoint minLoc, maxLoc;
cvMinMaxLoc(result, &minValue, &maxValue, &minLoc, &maxLoc);
cvRectangle(srcResult, minLoc, cvPoint(minLoc.x + templatW, minLoc.y+ templatH), cvScalar(0,0,255));
CvPoint new_minLoc;
// 计算下一个最小值
new_minLoc = getNextMinLoc(result, minLoc, maxValue, templatW, templatH);
cvRectangle(srcResult, new_minLoc, cvPoint(new_minLoc.x + templatW, new_minLoc.y+ templatH), cvScalar(0,0,255));
// 再下一个
new_minLoc = getNextMinLoc(result, new_minLoc, maxValue, templatW, templatH);
cvRectangle(srcResult, new_minLoc, cvPoint(new_minLoc.x + templatW, new_minLoc.y+ templatH), cvScalar(0,0,255));
cvNamedWindow("srcResult", 1);
cvNamedWindow("templat", 1);
cvShowImage("srcResult", srcResult);
cvShowImage("templat", templat);
cvWaitKey(0);
cvReleaseImage(&result);
cvReleaseImage(&templat);
cvReleaseImage(&srcResult);
cvReleaseImage(&src);
return 0;
}
- OpenCV中文网站例程——多目标模板匹配
- OpenCV中文网站例程——单目标模板匹配
- OpenCV中文网站例程——Canny边缘检测
- OpenCV中文网站例程——轮廓检测2
- OpenCV中文网站例程——图像旋转和缩放
- OpenCV中文网站例程——Hough线段检测
- OpenCV中文网站例程——鼠标绘图,图像修复
- OpenCV中文网站例程——离散傅里叶变换DFT
- OpenCV中文网站例程——贝塞尔曲线绘制
- OpenCV中文网站例程——目标跟踪
- OpenCV中文网站例程——摄像头标定
- OpenCV中文网站例程——图像颜色分布直方图
- OpenCV中文网站例程——仿射变换
- OpenCV中文网站例程——直线拟合cvFitline
- 多目标模板匹配
- OpenCV中文网站例程——图像创建、保存和复制
- OpenCV中文网站例程——Canny边缘检测(带滚动条)
- OpenCV中文网站例程——轮廓检测(只检测图像的外部轮廓)
- Vim学习资料汇
- UDP 丢包
- OpenCV中文网站例程——单目标模板匹配
- [LeetCode]4 Add Two Numbers(C++,Python实现)
- WIN8下配置java环境变量
- OpenCV中文网站例程——多目标模板匹配
- java.lang.OutOfMemoryError: Java heap space 的解决
- 利用简单的shell脚本,生成有规律的导入文件
- 实现磁盘搜索文件
- 用yum安装Apache,Mysql,PHP
- 采用static nested的安全的单例模式脚本
- hive ,sqoop使用的jdbc驱动版本(mysql-connector-java-5.1.23-bin.jar)影响hive使用
- [BASIC-2] 01字串
- CentOS 6.3下源码安装LAMP(Linux+Apache+Mysql+Php)环境