将KCF算法中的输入图像改为自己的摄像头(C++)
将KCF算法中的输入图像改为自己的摄像头(C++)
原KCF算法中作者指定的输入图像是文件中的图像序列,初始化的位置也是从文件中读取的,如果有不太了解的可以看下我之前的一篇博客
KCF代码运行并显示效果(C++)
现在我想把其中的输入改为我自己的摄像头,再从摄像头中自己手动框选出想要跟踪的目标,主要就是把runtracker.cpp文件改一下,下面是我改的,大家可以做一个参考:
runtracker.cpp
#include <iostream>
#include <fstream>
#include <sstream>
#include <algorithm>#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>#include "kcftracker.hpp"#include <dirent.h>using namespace std;
using namespace cv;// 当前帧
Mat frame;
//初始帧框选目标时候用来显示用的Mat对象
Mat backup;// Tracker results 跟踪目标的结果框
Rect result;//函数声明
void on_mouse(int event, int x, int y, int flags, void* );
//初始帧用来框选目标的两个点
cv::Point Point1;
cv::Point Point2;
//初始帧框选目标时判断是第几个点
int counter = 1;int main(int argc, char* argv[]){if (argc > 5) return -1;bool HOG = true; // 是否使用hog特征bool FIXEDWINDOW = false; // 是否使用修正窗口bool MULTISCALE = true; // 是否使用多尺度bool SILENT = true; // 是否不做显示bool LAB = false; // 是否使用LAB颜色//不同位置的参数代表的含义for(int i = 0; i < argc; i++){if ( strcmp (argv[i], "hog") == 0 )HOG = true;if ( strcmp (argv[i], "fixed_window") == 0 )FIXEDWINDOW = true;if ( strcmp (argv[i], "singlescale") == 0 )MULTISCALE = false;if ( strcmp (argv[i], "show") == 0 )SILENT = false;if ( strcmp (argv[i], "lab") == 0 ){LAB = true;HOG = true;}if ( strcmp (argv[i], "gray") == 0 )HOG = false;}//使用setMouseCallback函数,首先要有一个窗口和名字cv::namedWindow("Camera", cv::WINDOW_NORMAL);//用来显示帧号的一些设置int text_offset = 50;cv::Point origin(text_offset, text_offset);int fontFace = cv::FONT_HERSHEY_COMPLEX;double fontScale = 0.7;cv::Scalar color(255, 0, 0);int thickness = 1;cv::LineTypes lineType = cv::LINE_AA;bool bottomLeftOrigin = false;// Create KCFTracker objectKCFTracker tracker(HOG, FIXEDWINDOW, MULTISCALE, LAB);// Write Resultsofstream resultsFile;string resultsPath = "output.txt";resultsFile.open(resultsPath);// Frame counterint nFrames = 0;//open camera, 0表示使用的是笔记本电脑自带的摄像头,如果是外接的摄像头一般要改成1VideoCapture cam(0);if ( !cam.isOpened())return -1;while(true){cam>> frame;if(frame.empty())break;putText(frame, to_string(nFrames), origin, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin);// First frame, 框选目标并初始化trackerif (nFrames == 0) {imshow("Camera", frame);frame.copyTo(backup);cv::setMouseCallback("Camera", on_mouse);waitKey(0);tracker.init(Rect(Point1.x, Point1.y, Point2.x - Point1.x, Point2.y - Point1.y), frame);rectangle(frame, Point1, Point2, Scalar(0, 255, 255), 2, 8);resultsFile << Point1.x << "," << Point1.y << "," << Point2.x - Point1.x << "," << Point2.y - Point1.y << endl;}// Updateelse{cout << "nFrames: " << nFrames << endl;result = tracker.update(frame);rectangle( frame, Point( result.x, result.y ), Point( result.x+result.width, result.y+result.height), Scalar( 0, 255, 255 ), 2, 8 );resultsFile << result.x << "," << result.y << "," << result.width << "," << result.height << endl;}nFrames++;imshow("Camera", frame);if( waitKey(10)== ' ' )break;}cam.release();resultsFile.close();return 0;
}//每点击两个点之后,把两个点组成的矩形框的四个点的坐标显示出来
void on_mouse(int event, int x, int y, int flags, void*){if (event == cv::EVENT_LBUTTONDOWN){if (counter == 2){Point2.x = x;Point2.y = y;cout << "leftTop, rightTop, leftBottom, rightBottom: "<< Point1.x << "," << Point1.y << ","<< Point2.x << "," << Point1.y << ","<< Point1.x << "," << Point2.y << ","<< Point2.x << "," << Point2.y << endl << endl;cv::Point leftTopCorner;cv::Point rightBottomCorner;leftTopCorner.x = min(Point1.x, Point2.x);leftTopCorner.y = min(Point1.y, Point2.y);rightBottomCorner.x = max(Point1.x, Point2.x);rightBottomCorner.y = max(Point1.y, Point2.y);cv::rectangle(frame, leftTopCorner, rightBottomCorner, cv::Scalar(0, 255, 0), 1, cv::LINE_AA, 0);Point1 = leftTopCorner;Point2 = rightBottomCorner;cv::imshow("Camera", frame);backup.copyTo(frame);counter =1;return;}else if (counter == 1) {Point1.x = x;Point1.y = y;cv::drawMarker(frame, Point1, cv::Scalar(0, 255, 0), cv::MARKER_CROSS, 10, 1, cv::LINE_AA);cv::imshow("Camera", frame);backup.copyTo(frame);counter++;cout << "You've selected one point, now select the second! " << endl;}}
}
结果如下:
初始化:
跟踪结果:
将KCF算法中的输入图像改为自己的摄像头(C++)相关推荐
- 颜色特征怎么在kcf算法中得出高斯响应矩阵的代码_剖析KCF
来源自我的博客 前言 核相关滤波算法是单目标跟踪领域一个举足轻重的算法,而kernelized correlation filters(KCF)是其原始形态,下面我以一个小白的角度慢慢揭开其神秘面纱. ...
- kcf算法中cos_window是什么意思_知网/维普查重系统算法介绍(史上最详细)
很多同学在降重的过程中经常是面对一大片标红的文字不知所措,无从下手,甚至修改了两三遍了重复率依然还是没有变,更过分的是有的居然不降反升,这就尴尬了.那么这就要求大家对各个查重系统的规则和算法有一定的了 ...
- 单目标跟踪--KCF算法(核化相关滤波算法)Python实现(超详细)
Tracking-KCF Algorithm 注:本文涉及的算法的代码实践已上传至GitHub,恳求大佬们指点!^ _ ^ 1. 目标检测跟踪与算法背景概述 目标跟踪任务在许多的计算机视觉系统中都 ...
- 人脸检测中,如何构建输入图像金字塔
目录 写在前面 人脸检测中的图像金字塔 代码实现 MTCNN Seetaface 总结 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在前面 在文章<特征,特征不变性 ...
- BMS算法中定义SOC需考虑哪些因素
SOC(state of charge)算法一直是BMS开发应用的关键技术之一.因此讨论SOC算法的技术文章很常见,企业对SOC估算的高精度也往往是宣传的亮点.而关于SOC详尽的解释和定义却不常被考虑 ...
- 一个小改动,CNN输入固定尺寸图像改为任意尺寸图像
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文小白将和大家一起学习如何在不使用计算量很大的滑动窗口的情况下对 ...
- 在ROS环境下使用KCF算法追踪图像
在ROS环境下使用KCF算法追踪图像 项目是基于dji的[DJI Onboard SDK](dji-sdk/Onboard-SDK: DJI Onboard SDK Official Reposito ...
- 避免图像去雾算法中让天空部分出现过增强的一种简易方法
FROM:http://www.chawenti.com/articles/25193.html 在经典的几种去雾算法中,包括何凯明的暗通道去雾.Tarel的基于中值滤波的去雾以及一些基于其他边缘保留 ...
- 图像降噪算法——中值滤波/均值滤波/高斯滤波/双边滤波
图像降噪算法--中值滤波/均值滤波/高斯滤波/双边滤波 图像降噪算法--中值滤波/均值滤波/高斯滤波/双边滤波 1. 基本原理 2. C++代码实现 3. 结论 图像降噪算法--中值滤波/均值滤波/高 ...
最新文章
- 支付宝支付框js代码
- python leetcode 1
- 《大话设计模式》读书笔记-第8章 工厂方法模式
- cc2530期末试卷_无线传感网期末考试 zigbee期末考试试题
- 安卓canvas设置HTML,安卓开发中view和canvas的理解
- mysql修改用户密码1133_后台修改mysql用户密码后无法连接
- Packet Capture
- 远程升级stm32程序_艾拉比智能成为意法半导体STM32战略合作伙伴
- django和celery结合应用
- 简单算法系列:快速算法/冒泡算法两则
- git 某个文件回退到指定版本
- 简七32堂极简理财课——模块五:基金与股票,年化收益20%+
- [转组第3天] | 黑盒测试
- 实现跨word文档的格式刷,两个word间格式刷
- ERROR:C3848
- 如何嫁给年入百万的阿里人?
- 儿童python入门书籍推荐_有哪些Python入门的书籍值得推荐?
- 基于SSH框架的学生考试系统(注意看文档目录)
- 会话/序列推荐:Caser、SASRec、BERT4Rec [Session based / Sequential Recommendation]
- smina 基于结构的虚拟筛选
热门文章
- 009 简单的渗透测试流程
- OPDS书库目录总结(添加OPDS书库目录)
- Astah Sequence Diagram图
- 电厂脱硫吸收塔消泡剂降低石灰石的用量,效果杠杠的
- 单点登录简单原理(应用多系统)
- M1的Xcode运行旧项目报“building for iOS Simulator, but linking in object file built for iOS, for architectur
- 【收集】NLP语料库数据集+持续更新
- SHT20/SHT21温湿度值换算和CRC计算方法
- UART项目验证(一) uart协议与uart ip的理解
- Kmeans算法及简单案例