资源简介
采用精确背景补偿,实现动态背景下动态目标检测,通过KNN匹配、比率筛选、对称约束三层筛选提取良好匹配点对,结合自适应外点滤除算法,实现对复杂环境的精确补偿。

代码片段和文件信息
#include
#include
#include
#include “iostream“
#include “func.h“
using namespace cv;
using namespace std;
using namespace xfeatures2d;
#define pi 3.1415926
//使用说明
void Func::attention()
{
printf(“[0]表示前一帧,[1]表示当前帧\n\n“);
}
//读视频文件
void Func::readVideo(String &videoFile)
{
capture.open(videoFile);
//capture.open(0);
if (!capture.isOpened())
{
cout << “Could not initialize capturing...\n“;
system(“pause“);
}
width = capture.get(CV_CAP_PROP_frame_WIDTH);
height = capture.get(CV_CAP_PROP_frame_HEIGHT);
}
//读frame
void Func::readframe()
{
capture.read(cur_frame); //读当前帧
cvtColor(cur_frame cur_gray COLOR_BGR2GRAY);
if (prev_gray.empty()) {
cur_gray.copyTo(prev_gray); //更新前一帧
cur_frame.copyTo(prev_frame); //更新前一帧
}
}
//SURF特征检测
void Func::surfDetect()
{
Pts[0].clear(); Pts[1].clear();
desc[0].release(); desc[1].release();
surfDetector->detectAndCompute(prev_gray Mat() Pts[0] desc[0]);
surfDetector->detectAndCompute(cur_gray Mat() Pts[1] desc[1]);
//drawKeypoints(cur_frame Pts[1] cur_frame Scalar(0 0 255));
//printf(“SURF检测点数:%d、%d \n“ Pts[0].size() Pts[1].size());
}
//KNN匹配
void Func::BfMatch()
{
knnMatches[0].clear();
matcher.knnMatch(desc[0] desc[1] knnMatches[0] 2); //正向匹配
//BBF搜索算法
//BBFmatches.clear();
BBFpts[0].clear(); BBFpts[1].clear();
for (size_t i = 0; i < knnMatches[0].size(); i++) {
const DMatch& bestMatch = knnMatches[0][i][0]; //汉明距离最小
const DMatch& betterMatch = knnMatches[0][i][1]; //汉明距离次小
float distanceRatio = bestMatch.distance / betterMatch.distance;
//利用汉明距离粗略过滤匹配点对
if (distanceRatio < minRatio) {
//BBFmatches.push_back(bestMatch);
BBFpts[0].push_back(Pts[0][bestMatch.queryIdx].pt);
BBFpts[1].push_back(Pts[1][bestMatch.trainIdx].pt);
}
}
//printf(“对称约束前:BBFpts[0].size = %d BBFpts[1].size = %d \n“ BBFpts[0].size() BBFpts[1].size());
knnMatches[1].clear();
matcher.knnMatch(desc[1] desc[0] knnMatches[1] 2); //反向匹配
BBFpts_rev[0].clear();
BBFpts_rev[1].clear();
for (size_t i = 0; i < knnMatches[1].size(); i++) {
const DMatch& bestMatch_rev = knnMatches[1][i][0]; //汉明距离最小
const DMatch& betterMatch_rev = knnMatches[1][i][1]; //汉明距离次小
float distanceRatio = bestMatch_rev.distance / betterMatch_rev.distance;
//利用汉明距离粗略过滤匹配点对
if (distanceRatio < minRatio) {
//BBFmatches.push_back(bestMatch);
BBFpts_rev[0].push_back(Pts[0][bestMatch_rev.trainIdx].pt);
BBFpts_rev[1].push_back(Pts[1][bestMatch_rev.queryIdx].pt);
}
}
//printf(“对称约束前:BBFpts_rev[0].size = %d BBFpts_rev[1].size = %d \n“ BBFpts_rev[0].size() BBFpts_rev[1].size());
/*printf(“---------------------------------------------------------\n“);
for (size_t i = 0; i < BBFpts[0].size(); i++)
{
printf(“(%d %d) (%d %d)\n“ BBFpts[0][i].x BBFpts[0][i].y BBFpts[1][i].x BBFpts[1][
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-04-19 19:05 基于SURF匹配的检测算法改进-3\
文件 25188 2019-04-19 19:05 基于SURF匹配的检测算法改进-3\func.cpp
文件 4987 2019-04-19 19:05 基于SURF匹配的检测算法改进-3\func.h
文件 1704 2019-04-19 16:53 基于SURF匹配的检测算法改进-3\main.cpp
文件 6073 2019-04-19 19:05 基于SURF匹配的检测算法改进-3\基于SURF匹配的检测算法改进-3.vcxproj
文件 1154 2019-04-19 19:05 基于SURF匹配的检测算法改进-3\基于SURF匹配的检测算法改进-3.vcxproj.filters
文件 165 2019-04-19 16:51 基于SURF匹配的检测算法改进-3\基于SURF匹配的检测算法改进-3.vcxproj.user
- 上一篇:2FSK的调制在labbiew下的实现
- 下一篇:银行家算法、安全性算法
相关资源
- 基于OpenCV的数字识别468815
- 使用opencv去掉二值化图像中黑色面积
- opencv环境配置
- win10 64位下编译的opencv4.5.5库,opencv
- NVIDIAOpticalFlowSDK-79c6cee80a2df9a196f20afd6
- opencv_contrib-3.4.0.zip
- opencv2.4.9源码分析——SIFT
- 用两个摄像头实现,双目标定,双目
- opencv_traincascade训练分类器,手势识别
- opencv3.0交叉编译用parallel.cpp
- 基于opencv的图像识别识别图像中的色
- 基于openCV的识别特定颜色区域
- 基于OpenCV的分水岭算法实现
- QT+opencv+OCR 身份证号码,银行卡号识别
- opencv视频特定颜色区域识别
- 把RGB转换为HSV和HSI然后根据黄色和蓝
- opencv视觉测距
- 基于Qt和opencv的身份证号码识别系统
- opencv_ffmpeg249.dll
- SfM稀疏三维点云重建--完整工程文件
- 基于opencv的数人头程序源代码
- 利用OpenCV中的Stitcher类实现全景图像拼
- opencv实现的sift算法源码,包含了图像
- openCV 上的小波变换
- 基于OPENCV的车牌识别系统设计
- 617张国内车牌60-17bmp图片用于OpenCV正样
- hog特征提取,c版本代码
- 基于Qt5.8+OpenCV3.2的Basler多相机触发开
- 基于Opencv实现的图像纠偏
- ImageWatch2019.vsix
评论
共有 条评论