OpenCV记录鼠标左键点击位置

如题,最近要帮师兄做一些图片标记的工作,很繁琐。写了些很简短的程序,放着吧,省的以后自己再用给弄丢了。
如下,程序完成的主要功能是:打开一个窗口,显示视频第一帧,你在窗口中点击鼠标左键时,点击处会用红点标记,同时鼠标点击处的坐标值输出到.txt文件中。按下空格或其他键跳转下一帧。。。
不多说,上源码:

#include<iostream>
#include<opencv2/opencv.hpp>
#include <fstream>
using namespace cv;
using namespace std;

void on_MouseHandle(int event, int x, int y, int flags, void* param);


ofstream OutFile("dount.txt", ios::out|ios::binary); 
Mat frame;//定义一个Mat变量,用于存储每一帧的图像

int main() {
//【1】读入视频
    VideoCapture capture("test.mp4");
    namedWindow("record_point_window", WINDOW_NORMAL);
    setMouseCallback("record_point_window",on_MouseHandle);
    //【2】循环显示每一帧
    int i = 0;
    char name[20];
    while(1)  
    {  
//        Mat frame;//定义一个Mat变量,用于存储每一帧的图像
        capture>>frame;  //读取当前帧

        i++;
        OutFile << i;
        //若视频播放完成,退出循环
        if (frame.empty())
        {
            break;
        }
//        sprintf(name, "output\\%d.jpg", i);//输出到上级目录的output文件夹下
//        imwrite(name,frame);//输出一张jpg图片到工程目录下
        sprintf(name, "%d", i);
        putText( frame, name, Point(0, 20), FONT_HERSHEY_SIMPLEX, 0.6, Scalar(0,255,0));
        imshow("record_point_window",frame);  //显示当前帧
        waitKey(0);  //直到有按键按下
        OutFile << endl;
    }  
    return 0;
}

void on_MouseHandle(int event, int x, int y, int flags, void* param)
{
    Point pt;
//    Mat& image = *(cv::Mat*) param;
    switch(event)
    {
        //左键按下消息
    case EVENT_LBUTTONDOWN: 
        {
            pt = Point(x, y);
            OutFile << "  " << pt.x << " " << pt.y;
            cv::circle(frame, pt, 10, cv::Scalar(0, 0, 255), -1);
            imshow("record_point_window", frame);  //显示当前帧
        }
        break;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值