zoukankan      html  css  js  c++  java
  • 1、【opencv实例】鼠标截图和滑动条播放视频

    一、鼠标截图

     1 //鼠标截图
     2 #include<opencv2/opencv.hpp>
     3 #include<iostream>
     4 
     5 using namespace cv;
     6 using namespace std;
     7 
     8 Mat img=imread("1.jpg");
     9 Mat temp=img.clone();
    10 Mat ROI;
    11 Point pt;
    12 bool flag=false;
    13 
    14 void onMouse(int event,int x,int y,int flag,void* param){
    15     switch (event)
    16     {
    17     case CV_EVENT_LBUTTONDOWN://鼠标左键按下
    18         //cout<<"鼠标左键按下"<<endl;
    19         flag=true;
    20         pt.x=x;
    21         pt.y=y;
    22         break;
    23     case CV_EVENT_MOUSEMOVE://鼠标移动
    24         //cout<<"鼠标移动"<<endl;
    25         if(flag){
    26             temp.copyTo(img);//temp复制给img(相当于恢复成原图),以便永远只有一个矩形(否则许多矩形会重叠在一起)
    27             rectangle(img,pt,Point(x,y),Scalar(0,255,0),2,8);
    28         }
    29         break;
    30     case CV_EVENT_LBUTTONUP://鼠标左键抬起
    31         //cout<<"鼠标抬起"<<endl;
    32         flag=false;
    33         //ROI=img(Rect(pt.x,pt.y,x-pt.x,y-pt.y));//确定ROI区域,有矩形边框
    34         ROI=temp(Rect(pt.x,pt.y,x-pt.x,y-pt.y));//无矩形边框
    35         imshow("ROI",ROI);
    36         imwrite("ROI.jpg",ROI);
    37         break;
    38     default:
    39         break;
    40     }
    41 }
    42 
    43 int main(){
    44     namedWindow("mouse",CV_WINDOW_AUTOSIZE);
    45     setMouseCallback("mouse",onMouse,0);
    46     while(1){
    47         imshow("mouse",img);
    48         if(27==waitKey(10))//esc跳出循环
    49             break;
    50     }
    51     return 0;
    52 }

    二、滑动条视频播放

     1 #include<opencv2/opencv.hpp>
     2 #include<iostream>
     3 #include<stdio.h>
     4 
     5 using namespace cv;
     6 using namespace std;
     7 
     8 VideoCapture cap;
     9 int value = 0;
    10 void onChange(int pos,void*){
    11     cap.set(CV_CAP_PROP_POS_FRAMES,pos);//设置视频帧位置
    12 }
    13 
    14 int main(){
    15     Mat frame;
    16     char strFps[20];
    17     cap.open("1.mp4");
    18     namedWindow("video",CV_WINDOW_AUTOSIZE);
    19     int frameCount=cap.get(CV_CAP_PROP_FRAME_COUNT);//获取视频总帧数
    20     createTrackbar("Frame","video",&value,frameCount,onChange);
    21 
    22     if(cap.isOpened()){//如果视频成功打开
    23         while(1){
    24             double Fps=cap.get(CV_CAP_PROP_FPS);//获得视频帧率
    25             sprintf(strFps,"Fps%0.1f/s",Fps);//格式化字符串
    26 
    27             int framePos= (int)cap.get(CV_CAP_PROP_POS_FRAMES);//获取视频帧位置
    28             cout << "current pos : " << framePos << endl;
    29             setTrackbarPos("Frame","video",framePos);//设置滑动条位置
    30             cap>>frame;
    31             if(!frame.empty()){//如果该帧不为空
    32                 putText(frame,strFps,Point(5,30),CV_FONT_HERSHEY_COMPLEX_SMALL,1,Scalar(0,255,0),2,8);
    33                 imshow("video",frame);
    34                 if(27==waitKey(1000/Fps))//esc退出,1000/Fps毫秒刷新
    35                     break;
    36             }
    37         }
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    Jmeter 常用函数(20)- 详解 __counter
    Jmeter 常用函数(19)- 详解 __BeanShell
    Python 简明教程 --- 26,Python 多进程编程
    Python 简明教程 --- 25,Python 目录操作
    Python 简明教程 --- 24,Python 文件读写
    Zookeeper分布式过程协同技术
    设计模式之命令模式案例详解
    设计模式之模板方法模式
    设计模式之代理模式案例详解
    设计模式之享元模式
  • 原文地址:https://www.cnblogs.com/Long-w/p/9662263.html
Copyright © 2011-2022 走看看