资源简介
基于OpenCv实现了模板图像的旋转匹配,此代码基于matchTemplate函数封装实现可以得知旋转角度的模板匹配
代码片段和文件信息
#include
#include
//#include
#include
using namespace cv;
using namespace std;
//ROI区域的位置信息
#define xx 100//300// //横坐标
#define yy 100//80//240// //纵坐标
#define zz 300//400// //正方形ROI区域的边长
#define PI 3.14159267989
#define ModelPATH “..\\ConsoleApplication1\\picture\\my Logo.bmp“//模板图像路径
#define SearchPATH “..\\ConsoleApplication1\\picture\\my Logo.bmp“//待检测图像路径
int nThresh = 80;//二值化处理的控制阈值,最大值为255
//图片旋转函数
void imrotate(Mat &img Mat &newIm double angle)//img:输入图片;newIm:输出图片;angle:旋转角度(°)
{
//int len = max((img.cols) (img.rows));
//Point2f pt(len / 2.0 len / 2.0);
//Mat r = getRotationMatrix2D(pt angle 1.0);
//warpAffine(img newIm r Size(len len));
//better performance :
Point2f pt(img.cols / 2. img.rows / 2.);
Mat r = getRotationMatrix2D(pt angle 1.0);
warpAffine(img newIm r img.size());
}
//取圆形ROI区域函数:具体实现功能为输入原图,取原图最大可能的原型区域输出
Mat circle_tr(Mat src)
{
Mat dst = Mat::zeros(src.size() src.type());
Mat mask = Mat::zeros(src.size() CV_8U);
Point circleCenter(mask.cols / 2 mask.rows / 2);
int radius = min(mask.cols mask.rows) / 2;
circle(mask circleCenter radius Scalar(255) -1);
src.copyTo(dst mask);
return dst;
}
//旋转匹配函数(输入参数分别为匹配区域的左上角坐标、匹配角度、模板图像的ROI区域、待匹配图像)
void RatationMatch(Point &location double &angle Mat modelpicture Mat searchpicture)
{
Mat modeltmp searchtmp;
//对模板ROI区域和待检测图像分别进行三层图像金字塔下采样
pyrDown(modelpicture modeltmp Size(modelpicture.cols / 2 modelpicture.rows / 2));
pyrDown(searchpicture searchtmp Size(searchpicture.cols / 2 searchpicture.rows / 2));
pyrDown(modeltmp modeltmp Size(modeltmp.cols / 2 modeltmp.rows / 2));
pyrDown(searchtmp searchtmp Size(searchtmp.cols / 2 searchtmp.rows / 2));
pyrDown(modeltmp modeltmp Size(modeltmp.cols / 2 modeltmp.rows / 2));
pyrDown(searchtmp searchtmp Size(searchtmp.cols / 2 searchtmp.rows / 2));
Mat newIm;//临时储存每个旋转角度对应的图片
//定义图片匹配所需要的参数
int result_cols = searchtmp.cols - modeltmp.cols;
int result_rows = searchtmp.rows - modeltmp.rows;
Mat result = Mat(result_cols result_rows CV_32FC1);
double minVal maxVal temp;//minVal:当前匹配计算的最小值
Point minLoc maxLoc matchLoc1;//minLoc:当前最佳匹配区域的左上角坐标
//在没有旋转的情况下进行第一次匹配计算
newIm = circle_tr(modeltmp);
matchTemplate(searchtmp newIm result CV_TM_SQDIFF);
minMaxLoc(result &minVal &maxVal &minLoc &maxLoc Mat());
location = minLoc;
temp = minVal;
angle = 0;//当前旋转角度记录为0
//以步长为5进行第一次粗循环匹配
for (int i = -20; i < 21; i = i + 5)
{
double start = (double)clock();
imrotate(modeltmp newIm i);
newIm = circle_tr(newIm);
matchTemplate(searchtmp newIm result CV_TM_SQDIFF);
minMaxLoc(result &minVal &maxVal &minLoc &maxLoc Mat());
double finish = (double)clock();
if (minVal < temp)
{
location = minLoc;
temp = minVal;
angle = i;
}
cout << minVal << “ “ << temp << “ “ << finish - start << end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4121 2018-08-15 16:00 基于Opencv实现的旋转匹配\ConsoleApplication1\ConsoleApplication1.vcxproj
文件 946 2018-08-15 16:00 基于Opencv实现的旋转匹配\ConsoleApplication1\ConsoleApplication1.vcxproj.filters
文件 8826 2018-09-10 00:19 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\ConsoleA.7D2ACBDB.tlog\cl.command.1.tlog
文件 210162 2018-09-10 00:19 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\ConsoleA.7D2ACBDB.tlog\CL.read.1.tlog
文件 8800 2018-09-10 00:19 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\ConsoleA.7D2ACBDB.tlog\CL.write.1.tlog
文件 230 2018-09-10 00:19 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\ConsoleA.7D2ACBDB.tlog\ConsoleApplication1.lastbuildstate
文件 15540 2018-09-10 00:19 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\ConsoleA.7D2ACBDB.tlog\li
文件 15414 2018-09-10 00:19 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\ConsoleA.7D2ACBDB.tlog\li
文件 1542 2018-09-10 00:19 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\ConsoleA.7D2ACBDB.tlog\li
文件 3612 2018-09-10 00:19 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\ConsoleApplication1.log
文件 227656 2018-08-09 16:30 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\Gauss_test.obj
文件 339712 2018-08-15 15:56 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\GetArea.obj
文件 264131 2018-08-07 14:51 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\imageRatation.obj
文件 292687 2018-09-10 00:19 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\Match.obj
文件 342257 2018-08-04 17:58 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\multi_ROI.obj
文件 356568 2018-08-14 20:42 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\On_TreshChange.obj
文件 271176 2018-08-07 15:27 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\RotationMatch.obj
文件 1821696 2018-09-10 00:19 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\vc120.idb
文件 1871872 2018-09-10 00:19 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\vc120.pdb
文件 310956 2018-08-07 15:30 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\源.obj
文件 8420 2018-09-10 00:19 基于Opencv实现的旋转匹配\ConsoleApplication1\Match.cpp
文件 1228854 2018-09-10 00:05 基于Opencv实现的旋转匹配\ConsoleApplication1\picture\my Logo.bmp
文件 42196 2018-02-01 10:29 基于Opencv实现的旋转匹配\ConsoleApplication1\picture\my Logo.jpg
文件 14090240 2018-09-10 00:20 基于Opencv实现的旋转匹配\ConsoleApplication1.sdf
文件 1003 2018-07-31 17:11 基于Opencv实现的旋转匹配\ConsoleApplication1.sln
..A..H. 40448 2018-09-10 00:20 基于Opencv实现的旋转匹配\ConsoleApplication1.v12.suo
文件 94208 2018-09-10 00:19 基于Opencv实现的旋转匹配\Debug\ConsoleApplication1.exe
文件 794344 2018-09-10 00:19 基于Opencv实现的旋转匹配\Debug\ConsoleApplication1.ilk
文件 3968000 2018-09-10 00:19 基于Opencv实现的旋转匹配\Debug\ConsoleApplication1.pdb
目录 0 2018-09-10 00:19 基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\ConsoleA.7D2ACBDB.tlog
............此处省略8个文件信息
- 上一篇:基于单片机的仿生四足机器人
- 下一篇:process SPSS下的插件
相关资源
- opencv果实分割与识别
- qt环境下使用opencv打开双摄像头并保存
- opencv学习手势轮廓识别源代码
- OpenCV2 计算机视觉编程手册 配套源代
- 基于opencv的双目测距代码+文章
- opencvc车流量统计
- 车辆与车道线的检测与跟踪
- 基于opencv实现的图像拼接
- ROI区域&图像混合例程by浅墨
- ASM 人脸特征点提取
- 车牌识别源代码
- 并行计算mpi与openmp之蒙特卡洛求不规
- Opencv下利用SIFT、SURF、ORB三种特征点实
- opencv 、directshow捕获摄像头实时播放
- Opencv和图像分类
- 基于opencv的车道线检测代码
- OPENCv 在图片上写字,各种格式
- QT+OpenCV实现图像识别
- 程序包.rar基于pyqt+OpenCV设计的用户密
- OpenCV双目标定双目校正
- 用OpenCV作的一个车牌识别程序,可以
- 邮政编码识别 OPENCV
- opencv 神经网络分类
- opencv中文chm参考api文档
- opencv识别单行数字
- 颜色增强算法Opencv
- 一个基于 OpenCV 的人脸识别系统
- opencv检测人眼并精准定位瞳孔
- Opencv实现物体识别和追踪
- 基于OpenCV多目标的模板匹配算法
评论
共有 条评论