第四天:鼠标截图+滑动条播放视频实例

来源:互联网 发布:网络安全教育视频大学 编辑:程序博客网 时间:2024/06/05 14:14

一、主要功能

(1)、鼠标左键按下拖动显示轨迹,鼠标左键弹起显示截图并保存截图到本地。

(2)、视频播放时,滑动条同时显示播放帧的位置和视频帧率,滑动条拖动时可以实现同步指定帧播放。

#include "opencv2/opencv.hpp"#include <iostream>using namespace std;using namespace cv;Mat img = imread("1.jpg");Mat temp = img.clone();Mat ROI;Point pt;bool flag = false;double Fps;///鼠标消息回调函数//void OnMouse(int event, int x, int y, int flag, void* param)//{//switch(event)//{//case CV_EVENT_LBUTTONDOWN:  //鼠标左键按下////cout<<"left button down"<<endl;//flag = true;//pt.x = x;//pt.y = y;//break;//case CV_EVENT_MOUSEMOVE:   //鼠标移动////cout<<"mouse move"<<endl;//if(flag)//{//temp.copyTo(img);//rectangle(img, pt, Point(x, y), Scalar(0, 255, 0), 2, 8);//}//break;//case CV_EVENT_LBUTTONUP:   //鼠标左键弹起////cout<<"left button up"<<endl;//flag = false;//ROI = temp(Rect(pt.x, pt.y, x-pt.x, y-pt.y));  //确定ROI区域//imshow("ROI", ROI);//imwrite("ROI.bmp", ROI);//break;//default://break;//}//}int value;int framePos; void OnChange(int , void* param){VideoCapture cap = *(VideoCapture*)param;cap.set(CV_CAP_PROP_POS_FRAMES, value);  //设置视频帧位置}void main(){///鼠标截图功能//namedWindow("Mouse", CV_WINDOW_AUTOSIZE);//setMouseCallback("Mouse", OnMouse, 0);   //设置鼠标回调函数//while(1)//{//imshow("Mouse", img);//if(27 == waitKey(10))  //Esc跳出循环//break;//}char strFps[20];Mat frame;VideoCapture cap("1.avi");if(!cap.isOpened())  //打开视频失败return;int FrameCount = cap.get(CV_CAP_PROP_FRAME_COUNT);  //获取视频总帧数namedWindow("Video", CV_WINDOW_AUTOSIZE);createTrackbar("Frame", "Video", &value, FrameCount, OnChange, &cap);Fps = cap.get(CV_CAP_PROP_FPS);  //获取视频帧率sprintf(strFps, "Fps:%0.1f/s", Fps);  //格式化字符串while(1){framePos = cap.get(CV_CAP_PROP_POS_FRAMES);  //获取视频帧位置setTrackbarPos("Frame", "Video", framePos);  //设置滑动条位置cap>>frame;if(frame.empty())  //取帧失败break;putText(frame, strFps, Point(5, 30), CV_FONT_HERSHEY_COMPLEX_SMALL, 1, Scalar(0, 255, 0), 1, 8);imshow("Video", frame);if(27 == waitKey(1000/Fps) )  //Esc跳出循环退出break;}cap.release();destroyAllWindows();}
图示:

1、



2、




原创粉丝点击