题目:Opencv中的点追踪技术
来源:互联网 发布:linux 进程stdio 编辑:程序博客网 时间:2024/06/01 08:15
题目:Opencv中的点追踪技术
代码实现:
#include "opencv2/video/tracking.hpp"#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"#include <opencv2/core/core.hpp>#include <iostream>#include <ctype.h>using namespace cv;using namespace std;static void help(){cout << "\n\n\t该Demo演示了 Lukas-Kanade基于光流的lkdemo\n";cout << "\n\t程序默认从摄像头读入视频,可以按需改为从视频文件读入图像\n";cout << "\n\t操作说明: \n""\t\t通过点击在图像中添加/删除特征点\n""\t\tESC - 退出程序\n""\t\tr -自动进行追踪\n""\t\tc - 删除所有点\n""\t\tn - 开/光-夜晚模式\n" << endl;}Point2f point;bool addRemovePt = false;//--------------------------------【onMouse( )回调函数】------------------------------------//描述:鼠标操作回调//-------------------------------------------------------------------------------------------------static void onMouse(int event, int x, int y, int /*flags*/, void* /*param*/){if (event == EVENT_LBUTTONDOWN){point = Point2f((float)x, (float)y);addRemovePt = true;}}int main(int argc, char** argv){help();VideoCapture cap;TermCriteria termcrit(TermCriteria::MAX_ITER | TermCriteria::EPS, 20, 0.03);Size subPixWinSize(10, 10), winSize(31, 31);const int MAX_COUNT = 500;bool needToInit = false;bool nightMode = false;cap.open(0);if (!cap.isOpened()){cout << "Could not initialize capturing...\n";return 0;}namedWindow("LK Demo", 1);setMouseCallback("LK Demo", onMouse, 0);Mat gray, prevGray, image;vector<Point2f> points[2];for (;;){Mat frame;cap >> frame;if (frame.empty())break;frame.copyTo(image);cvtColor(image, gray, COLOR_BGR2GRAY);if (nightMode)image = Scalar::all(0);if (needToInit){// 自动初始化goodFeaturesToTrack(gray, points[1], MAX_COUNT, 0.01, 10, Mat(), 3, 0, 0.04);cornerSubPix(gray, points[1], subPixWinSize, Size(-1, -1), termcrit);addRemovePt = false;}else if (!points[0].empty()){vector<uchar> status;vector<float> err;if (prevGray.empty())gray.copyTo(prevGray);calcOpticalFlowPyrLK(prevGray, gray, points[0], points[1], status, err, winSize,3, termcrit, 0, 0.001);size_t i, k;for (i = k = 0; i < points[1].size(); i++){if (addRemovePt){if (norm(point - points[1][i]) <= 5){addRemovePt = false;continue;}}if (!status[i])continue;points[1][k++] = points[1][i];circle(image, points[1][i], 3, Scalar(0, 255, 0), -1, 8);}points[1].resize(k);}if (addRemovePt && points[1].size() < (size_t)MAX_COUNT){vector<Point2f> tmp;tmp.push_back(point);cornerSubPix(gray, tmp, winSize, Size(-1, -1), termcrit);points[1].push_back(tmp[0]);addRemovePt = false;}needToInit = false;imshow("LK Demo", image);char c = (char)waitKey(10);if (c == 27)break;switch (c){case 'r':needToInit = true;break;case 'c':points[0].clear();points[1].clear();break;case 'n':nightMode = !nightMode;break;}std::swap(points[1], points[0]);cv::swap(prevGray, gray);}return 0;}运行效果图:咳咳,为了读者方便,强行上博主丑照
0 0
- 题目:Opencv中的点追踪技术
- opencv点目标追踪
- opencv点追踪
- 点追踪技术演示
- opencv激光点追踪代码
- 题目:Opencv中的彩色目标跟踪技术
- 【opencv】特征点检测和追踪--光流法
- opencv+arduino进行物体点追踪
- OpenCV实现彩色点的实时追踪
- OpenCV中的CamShift彩色目标追踪
- 特征点匹配 opencv系列函数解析 追踪相关(一)
- 眼球追踪技术在用户体验中的应用
- opencv实现运动追踪
- opencv球体追踪
- python opencv入门 Shi-Tomasi 角点检测和适合图像追踪的特征(32)
- 获取追踪占位点
- 动态追踪技术漫谈
- [Servlet]会话追踪技术
- Android 自定义加载效果视图(loading)控件
- 二十四 Swift3.0之 类
- mac下配置PHP环境
- iOS应用设计模式开发中对简单工厂和工厂方法模式的运用
- 三个线程ABC,交替打印ABC
- 题目:Opencv中的点追踪技术
- 01.在PL/SQL中调用存储过程--oracle
- Newtown Slots "The Discovery" Adventure Slot Machine!(ibet, newtoawn casino malaysia, newtown, Newt)
- CALayer( 一 )
- 2017/4/11js中return关键字的作用
- IO复用、多进程和多线程三种并发编程模型
- ios修改应用名称以及修改默认的语言为中文
- 如何查找QUERY 与 WORKBOOK的关系
- 高性能高可用(3)NGINX