#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace cv;
using namespace std;
#define WINDOW_NAME1 "【原始图片】"
//#define WINDOW_NAME2 "【匹配窗口】"
//#define WINDOW_NAME3 "【感兴趣窗口】"
#define WINDOW_NAME "【亚像素级角点检测】" //为窗口标题定义的宏
Mat imageROI, m_grayImage;
int g_maxCornerNumber = 1;
RNG g_rng(12345);//初始化随机数生成器
Mat g_srcImage; Mat g_templateImage; Mat g_resultImage;
Mat binaryframe;
int g_nMatchMethod;
int g_nMaxTrackbarNum = 5;
const int num = 432;
char filename[50];
void on_Matching(int, void*);
int main()
{
//VideoCapture capture("14.avi");
//while (1)
//{
for (int i = 1; i <= num; i++)
{
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
sprintf(filename, "C:\\Users\\Allison\\Desktop\\tan\\%d.bmp", i);
frame = imread(filename, 1);
//threshold(frame,binaryframe,170,255,CV_THRESH_BINARY);
//frame = imread("C:\\Users\\Allison\\Desktop\\sin\\%d.bmp", i);
//capture >> frame; //读取当前帧
g_srcImage = frame;
g_templateImage = imread("1.jpg", 1);
//【2】创建窗口
namedWindow(WINDOW_NAME1, WINDOW_AUTOSIZE);
//namedWindow(WINDOW_NAME2, WINDOW_AUTOSIZE);
//namedWindow(WINDOW_NAME3, WINDOW_AUTOSIZE);
//【3】创建滑动条并进行一次初始化
createTrackbar("方法", WINDOW_NAME1, &g_nMatchMethod, g_nMaxTrackbarNum, on_Matching);
on_Matching(0, 0);
waitKey(20);
}
}
void on_Matching(int, void*)
{
Mat srcImage;
g_srcImage.copyTo(srcImage);
int resultImage_rows = g_srcImage.rows - g_templateImage.rows + 1;
int resultImage_cols = g_srcImage.cols - g_templateImage.cols + 1;
g_resultImage.create(resultImage_rows, resultImage_cols, CV_32FC1);
matchTemplate(g_srcImage, g_templateImage, g_resultImage, g_nMatchMethod);
normalize(g_resultImage, g_resultImage, 0, 1, NORM_MINMAX, -1, Mat());
double minValue; double maxValue; Point minLocation; Point maxLocation;
Point matchLocation;
minMaxLoc(g_resultImage, &minValue, &maxValue, &minLocation, &maxLocation, Mat());
if (g_nMatchMethod == TM_SQDIFF || g_nMatchMethod == TM_SQDIFF_NORMED)
{
matchLocation = minLocation;
}
else
{
matchLocation = maxLocation;
}
Mat imageROI = srcImage(Rect(matchLocation.x, matchLocation.y, g_templateImage.cols, g_templateImage.rows));
cvtColor(imageROI, m_grayImage, COLOR_BGR2GRAY);
namedWindow(WINDOW_NAME, WINDOW_AUTOSIZE);
vector<Point2f> corners;
double qualityLevel = 0.01;//角点检测可接受的最小特征值
double minDistance = 10;//角点之间的最小距离
int blockSize = 3;//计算导数自相关矩阵时指定的邻域范围
double k = 0.04;//权重系数
Mat copy = imageROI.clone(); //复制源图像到一个临时变量中,作为感兴趣区域
goodFeaturesToTrack(m_grayImage,//输入图像
corners,//检测到的角点的输出向量
g_maxCornerNumber,//角点的最大数量
qualityLevel,//角点检测可接受的最小特征值
minDistance,//角点之间的最小距离
Mat(),//感兴趣区域
blockSize,//计算导数自相关矩阵时指定的邻域范围
false,//不使用Harris角点检测
k);//权重系数
//【4】输出文字信息
//cout << "\n\t>-------------此次检测到的角点数量为:" << corners.size() << endl;
//【5】绘制检测到的角点
int r = 4;
for (unsigned int i = 0; i < corners.size(); i++)
{
circle(copy, corners[i], r, Scalar(g_rng.uniform(0, 255), g_rng.uniform(0, 255),
g_rng.uniform(0, 255)), -1, 8, 0);
}
imshow(WINDOW_NAME, copy);
//【7】亚像素角点检测的参数设置
Size winSize = Size(5, 5);
Size zeroZone = Size(-1, -1);
TermCriteria criteria = TermCriteria(TermCriteria::EPS + TermCriteria::MAX_ITER, 40, 0.001);
//【8】计算出亚像素角点位置
cornerSubPix(m_grayImage, corners, winSize, zeroZone, criteria);
//【9】输出角点信息
for (int i = 0; i < corners.size(); i++)
{
//cout << " \t>>精确角点坐标[" << i << "] (" << corners[i].x + matchLocation.x << "," << corners[i].y + matchLocation.y << ")" << endl;
cout << corners[i].x + matchLocation.x << " " << corners[i].y + matchLocation.y << endl;
Point p(corners[i].x + matchLocation.x, corners[i].y + matchLocation.y);
circle(srcImage, p, 4, Scalar(0, 255, 0), -1);
}
//rectangle(g_resultImage, matchLocation, Point(matchLocation.x + g_templateImage.cols, matchLocation.y + g_templateImage.rows), Scalar(0, 0, 255), 2, 8, 0);
rectangle(srcImage, matchLocation, Point(matchLocation.x + g_templateImage.cols, matchLocation.y + g_templateImage.rows), Scalar(0, 0, 255), 2, 8, 0);
//imshow(WINDOW_NAME3, imageROI);
imshow(WINDOW_NAME1, srcImage);
//imshow(WINDOW_NAME2, f_srcImage1);
}
没有合适的资源?快使用搜索试试~ 我知道了~
opencv 模板匹配+感兴趣区域+局部检测尖形末端 模板匹配+ROI+亚像素角点检测 - 连续输入图片后检测.zip
共1个文件
txt:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 190 浏览量
2023-07-06
11:49:44
上传
评论
收藏 2KB ZIP 举报
温馨提示
opencv 模板匹配+感兴趣区域+局部检测尖形末端 模板匹配+ROI+亚像素角点检测 - 连续输入图片后检测.zip
资源推荐
资源详情
资源评论
收起资源包目录
opencv 模板匹配+感兴趣区域+局部检测尖形末端 模板匹配+ROI+亚像素角点检测 - 连续输入图片后检测.zip (1个子文件)
1
模板匹配+ROI+亚像素角点检测 - 连续输入图片后检测.txt 5KB
共 1 条
- 1
资源评论
GZM888888
- 粉丝: 148
- 资源: 2912
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功