热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

opencv实现鼠标输入框选ROI区域

1.前言本文主要是使用opencv库实现从鼠标输入框选ROI区域,框选后截图并将框选出的区域的像素值保存在txt文本中,同一张图片可以重复框选区域并保

1. 前言

本文主要是使用opencv库实现从鼠标输入框选ROI区域,框选后截图并将框选出的区域的像素值保存在txt文本中,同一张图片可以重复框选区域并保存信息,当前图片信息框选完成后,按空格键可进入到下一张图片进行操作。

2. 实践

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// label.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include
#include using namespace cv;
using namespace std;cv::Mat org,dst,img,tmp;
Point prevPt = Point(-1, -1);
string lpath = "..//..//";
string rpath = "..//..//";int laneCount = 1;
int roadCount = 1;bool flag = 1;
int GetImageValue(Mat& img, int flag)
{if (flag == 1){char buffer[1];itoa(laneCount, buffer, 10);string str = buffer;string path = "";path = lpath + str + "-lane.txt";ofstream fp(path);if (!fp){printf("file open failed!");return -1;}for (int i = 0; i (i);for (int j = 0; j (i);for (int j = 0; j void OnMouse(int event, int x, int y, int flags, void* ustc)
{static Point pre_pt = (-1, -1);static Point cur_pt = (-1, -1);if (event == CV_EVENT_LBUTTONDOWN){org.copyTo(img);pre_pt = Point(x, y);}else if (event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON))//摁下左键,flags为1 {img.copyTo(tmp);cur_pt = Point(x, y);rectangle(tmp, pre_pt, cur_pt, Scalar(0, 255, 0, 0), 1, 8, 0);imshow("img", tmp);}else if (event == CV_EVENT_LBUTTONUP){org.copyTo(img);cur_pt = Point(x, y);rectangle(img, pre_pt, cur_pt, Scalar(0, 255, 0, 0), 1, 8, 0);imshow("img", img);img.copyTo(tmp);int width = abs(pre_pt.x - cur_pt.x);int height = abs(pre_pt.y - cur_pt.y);if (width == 0 || height == 0){return;}dst = org(Rect(min(cur_pt.x, pre_pt.x), min(cur_pt.y, pre_pt.y), width, height));Mat temp = dst.clone();GetImageValue(temp, flag);namedWindow("dst", 1);imshow("dst", dst);}
}
int main()
{string imgPath = "";vector vecFilename;glob(imgPath, vecFilename);for (int i = 0; i }

// ReductionDimension.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include using namespace cv;
using namespace std;int GetLineNumber(string path)
{ifstream fp(path);string line;int lineNum = 0;while (getline(fp, line)){ lineNum++;}return lineNum;
}void GetMatAndLabel(string path, Mat& dataMat, vector& label)
{ifstream fp(path);int rsize = GetLineNumber(path);Mat temp = Mat::zeros(Size(3, rsize), CV_8UC1);temp.copyTo(dataMat);if (!fp){printf("open failed");}string line;vector value;while (getline(fp, line)){int pos = 0;vector index;//index.push_back(0);while ((pos = line.find(",", pos)) != string::npos){index.push_back(pos);pos++;}index.push_back(line.size());string subStr;for (int i = 0; i (i);for (int j = 0; j }
int main()
{char* lanepath = "D:\\temp\\label\\lane.txt";char* roadpath = "D:\\temp\\label\\road.txt";Mat laneMat, roadMat, dataMat;vector laneLabel, roadLabel, label;GetMatAndLabel(roadpath, roadMat, roadLabel);GetMatAndLabel(lanepath, laneMat, laneLabel);vconcat(roadMat, laneMat, dataMat);label.insert(label.end(), roadLabel.begin(), roadLabel.end());label.insert(label.end(), laneLabel.begin(), laneLabel.end());LDA lda = LDA(dataMat, label, 1);Mat eigvector = lda.eigenvectors().clone();return 0;
}


推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 本文介绍了lintcode(12)题目的要求和解题思路,以及给出了相应的代码实现。题目要求在给定的字符串source中找到包括所有目标字符串字母的最短子串,并且时间复杂度为O(n)。解题思路是使用滑动窗口的方法,通过维护一个unordered_map来记录目标字符串中每个字符的出现次数,并使用双指针来寻找最小子串。代码实现部分给出了具体的实现代码。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • AFNetwork框架(零)使用NSURLSession进行网络请求
    本文介绍了AFNetwork框架中使用NSURLSession进行网络请求的方法,包括NSURLSession的配置、请求的创建和执行等步骤。同时还介绍了NSURLSessionDelegate和NSURLSessionConfiguration的相关内容。通过本文可以了解到AFNetwork框架中使用NSURLSession进行网络请求的基本流程和注意事项。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • 本文介绍了在PostgreSQL中批量导入数据时的优化方法。包括使用unlogged表、删除重建索引、删除重建外键、禁用触发器、使用COPY方法、批量插入等。同时还提到了一些参数优化的注意事项,如设置effective_cache_size、shared_buffer等,并强调了在导入大量数据后使用analyze命令重新收集统计信息的重要性。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
author-avatar
长大的夜夜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有