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;
}