• 大小: 4.6MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-09-16
  • 语言: 其他
  • 标签: OpenCv  旋转匹配  

资源简介

基于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\link.command.1.tlog

     文件      15414  2018-09-10 00:19  基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\ConsoleA.7D2ACBDB.tlog\link.read.1.tlog

     文件       1542  2018-09-10 00:19  基于Opencv实现的旋转匹配\ConsoleApplication1\Debug\ConsoleA.7D2ACBDB.tlog\link.write.1.tlog

     文件       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个文件信息

评论

共有 条评论