在图像点鼠标将坐标储存opencv

来源:互联网 发布:办公软件下载官方网站 编辑:程序博客网 时间:2024/06/08 01:13
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>
#include <vector>
#include <iostream>
#include <fstream>

using namespace std;
using namespace cv;

Mat org;
int n = 0;
vector<Point> capturePoint;

void on_mouse(int event, int x, int y, int flags, void *ustc)//event鼠标事件代号,x,y鼠标坐标,flags拖拽和键盘操作的代号
{
Point pt;//坐标点;
char coordinateName[16];

if (event == CV_EVENT_LBUTTONDOWN)//左键按下,读取坐标,并在图像上该点处划圆
{
pt = Point(x, y);
cout << x << " " << y << endl;
capturePoint.push_back(pt);
cout << capturePoint[n].x << " " << capturePoint[n].y << endl;
cout << "n=" << n << endl;
n++;
circle(org, pt, 2, Scalar(255, 0, 0, 0), CV_FILLED, CV_AA, 0);//划圆
sprintf(coordinateName, "(%d,%d)", x, y);
putText(org, coordinateName, pt, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0, 255), 1, 8);//在窗口上显示坐标
if (n >= 1)
{
//imshow("org", org);
cvDestroyAllWindows();


}
}

int main()
{
org = imread("one.png", 1);
namedWindow("org", 1);//定义一个org窗口
setMouseCallback("org", on_mouse, 0);//调用回调函数
imshow("org", org);
waitKey(0);
cout << n << endl;
cout << capturePoint.size() << endl;
cout << capturePoint[0].x << endl;
ofstream file("sample.txt");
if (!file)
{
cout << "open file error!";
return 1;
}
vector<Point>::iterator it = capturePoint.begin();
for (; it != capturePoint.end(); ++it)
{
file << it->x << ',' << it->y << endl;                            
}
file << endl;
file.close(); 
return 0;
}
原创粉丝点击