OpenCV 对图像序列实时可视化标记关键点
来源:互联网 发布:ai软件是什么 编辑:程序博客网 时间:2024/05/22 04:27
问题:
在进行特征学习时,经常需要将大量的图像提取出特征点(关键点),因此,想到在显示图像的时候,使用鼠标的双击操作来确定 关键点的位置。
操作要点:
1显示图像
2鼠标双击事件处理:左键双击,增加鼠标所在的点为新的关键点;右键双击,删除最近添加的关键点,与双击时的鼠标位置无关。
3实时显示:显示最新添加的点
4提取的关键点导出
代码:
#include "opencv2/opencv.hpp"using namespace cv;using namespace std;#define CONFIRM_PT_NUM (20)struct ConfirmParam { string window; // 窗口名称 Mat* image; Point points[CONFIRM_PT_NUM]; int point_idx;};void on_mouse_cb_confirm_pt (int event, int x, int y, int flags, void* userdata) { ConfirmParam* param = (ConfirmParam *) userdata; Mat display; param->image->copyTo (display); switch (event) { case CV_EVENT_LBUTTONDBLCLK: { // 左键双击:增加点 if (param->point_idx < CONFIRM_PT_NUM) { param->points[param->point_idx].x = x; param->points[param->point_idx].y = y; param->point_idx++; } } break; case CV_EVENT_RBUTTONDBLCLK: { // 右键双击: 删除最近添加的点 param->point_idx--; } break; default: break; } // 用于实时显示的绘制 for (int i = 0; i < param->point_idx; i++) { circle (display, param->points[i], 4, CV_RGB (255, 0, 0), -1); } // cv::imshow (param->window, display); cv::waitKey (1);}void main() { VideoCapture video (700); if (!video.isOpened()) { return; } while (1) { Mat frame; video >> frame; if (!frame.empty()) { break; } } // int frame_idx = 0; char sz[32] = {0}; ConfirmParam param; param.window = "CONFIRM"; param.point_idx = 0; namedWindow (param.window); // while (1) { Mat frame; video >> frame; if (frame.empty()) { break; } // frame_idx++; // Mat frame_cpy; frame.copyTo (frame_cpy); // sprintf_s (sz, "frame %d", frame_idx); putText (frame_cpy, sz, Point (0, 30), CV_FONT_NORMAL, 1.1, CV_RGB (255, 0, 0), 1); // //param.window; // 窗口名称 param.image = &frame_cpy;; //memset (param.points, -1, sizeof (param.points)); param.point_idx = 0; setMouseCallback (param.window, on_mouse_cb_confirm_pt, ¶m); imshow (param.window, frame_cpy); waitKey (0); // 选中点处理: 写到文件 FILE* fd = fopen ("point.dat", "ab+"); if (fd) { fprintf (fd, "frame %d:", frame_idx); for (int i = 0; i < param.point_idx; i++) { fprintf (fd, " (%4d,%4d)", param.points[i].x, param.points[i].x); } fprintf (fd, "\n"); fclose (fd); } // }}
结果:
Mylaf
1 0
- OpenCV 对图像序列实时可视化标记关键点
- 【OpenCV】SURF算法之视频图像实时特征点匹配
- 用Opencv实现RANSAC过滤关键点匹配对
- opencv彩色图像可视化实例
- opencv对图像进行边缘及角点检测
- 利用GDI+在MFC中显示OpenCV中的Mat图像的关键点
- 图像特征点(关键点)匹配
- openCV 学习笔记 cvFindDominantPoints找关键点
- OpenCV入门 - 提取SIFT关键点
- dlib、opencv - 人脸关键点定位
- Opencv 视频转为图像序列
- 使用opencv读取图像序列
- opencv序列图像ROI获取
- opencv中序列图像相加
- 5.轨迹抽象,关键点序列生成
- OpenCV 访问图像像素点
- opencv图像角点提取
- opencv图像角点检测
- 一个文本框只允许输入数字
- Loadrunner中集合点详解
- 百度定位sdk接入
- 为知笔记MarkDown使用总结.md
- 在Eclipse启动tomcat超时解决方法
- OpenCV 对图像序列实时可视化标记关键点
- Visual Studio原生开发的20条调试技巧(下)
- 高数Umaru系列(9)——哈士奇 (01背包)
- [FAQ17700]cct2.0 常见问题总结
- java提高篇(二)-----理解java的三大特性之继承
- EF 配置 (Sql Server, MySql)
- 23条前端性能优化,看懂就够了!
- GitHub尝鲜(一)
- Redis基础教程四