opencv鼠标键盘事件处理

直接上码#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

#include <iostream>
#include <ctype.h>

using namespace cv;
using namespace std;

CvPoint pt1 = Point(0,0);
CvPoint pt2 = Point(0,0);
bool is_selecting = false;

void cvMouseCallback(int mouseEvent,int x,int y,int flags,void* param)
{
  switch(mouseEvent)
  {
  case CV_EVENT_LBUTTONDOWN:
    pt1 = Point(x,y);
    pt2 = Point(x,y);
    is_selecting = true;
    break;
  case CV_EVENT_MOUSEMOVE:
    if(is_selecting)
      pt2 = Point(x,y);
    break;
  case CV_EVENT_LBUTTONUP:
    pt2 = Point(x,y);
    is_selecting = false;
    break;
  }
  return;
}

int main(int argc,char* argv[])
{
  char* window = "img";
  Mat img = imread("D:\\1.jpg",1);
  Mat img_show,roi;
  img.copyTo(img_show);
  namedWindow(window,CV_WINDOW_AUTOSIZE);
  setMouseCallback(window,cvMouseCallback);
  bool shift_on = false;
  while(true)
  {
    img.copyTo(img_show);
    rectangle(img_show,pt1,pt2,Scalar(255,255,255));
    imshow(window,img_show);
    char key = cvWaitKey(10);
    switch(key)
    {
    //ROI平移操作
                case ‘\t‘:
      shift_on = !shift_on; break;
    case ‘a‘:
      pt1.x--; pt2.x--; break;
    case ‘s‘:
      pt1.y++; pt2.y++; break;
    case ‘d‘:
      pt1.x++; pt2.x++; break;
    case ‘w‘:
      pt1.y--; pt2.y--; break;

               //ROI放大和缩小,主要是对初始设置的ROI区域的边缘进行平移操作
    case ‘1‘:
      if(shift_on) pt1.x--;
      else pt2.x--;
      break;
    case ‘2‘:
      if(shift_on) pt2.y++;
      else pt1.y++;
      break;
    case ‘3‘:
      if(shift_on) pt2.x++;
      else pt1.x++;
      break;
    case ‘4‘:
      if(shift_on) pt1.y--;
      else pt2.y--;
      break;

    //回车确定最终ROI区域的截取,并将其保存下来
    case ‘\r‘:
      roi=img(Rect(pt1.x,pt1.y,std::abs(pt2.x-pt1.x),std::abs(pt2.y-pt1.y)));
      imwrite("D:\\ROI.jpg",roi);
      break;
    };

    if(key==27) break;
  }
  return 0;
}
时间: 2025-01-10 21:39:59

opencv鼠标键盘事件处理的相关文章

python模拟鼠标键盘操作 GhostMouse tinytask 调用外部脚本或程序 autopy右键另存为

1.参考 autopy (实践见最后一章节) 用Python制作游戏外挂(上) AutoPy Introduction and Tutorial autopy.mouse.smooth_move(1, 1) 可以实现平滑移动 autopy - API Reference pip install PyUserInput SavinaRoja/PyUserInput [python3.5][PyUserInput]模拟鼠标和键盘模拟 Python-模拟鼠标键盘动作 autoit selenium借助

多电脑同局域网,同一套鼠标键盘,跨屏操作利器。

妈妈再也不担心我拿错键盘鼠标了. Input Director是款Windows下的一套鼠标键盘控制多台电脑工具,使用户可以通过连接在一台计算机上的一套键盘鼠标,轻松控制多台电脑.对于经常在不同电脑之间经常切换的用户来说,非常实用.我也不用为了测试一个软件,在本本和测试机之间来回切换.不过为了使用方便,最好是能将各个系统的显示器排成一排.  除了支持多个系统的切换和操作,Input Director同样支持“共享”剪贴板,在一个计算机上复制数据,可以切换到其他计算机上粘贴使用.不过Windows

Python - selenium_WebDriver 鼠标键盘事件

from selenium import webdriver #引入ActionChains类 提供了鼠标的操作方法 from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys from ReadTxt_demo import readTxt import time #鼠标键盘事件 ''' ActionChains 常用方法 per

【Unity3D】使用鼠标键盘控制Camera视角(即时战略类游戏视角):缩进,拉远,旋转

今天写一个demo,要用到鼠标键盘控制三维视角,因此写了个脚本用于控制. 该脚本可以用于即时战略类游戏的视角,提供了缩进,拉伸,旋转.同时按住鼠标右键不放,移动鼠标可以实现第一人称视角的效果. 1 using UnityEngine; 2 using System.Collections; 3 4 public class CameraController : MonoBehaviour { 5 6 7 public float near = 20.0f; 8 public float far

opencv 鼠标交互

最近在系统的学习opencv的基础知识: 之前没有去系统学习opencv基础,在用opencv的的时候会经常遇到各种问题,很有必要系统学习基础: 好的基础会让后面的学习 和实践 更加顺利: 下面贴出 opencv 鼠标交互的 代码 #include <opencv2/opencv.hpp>using namespace cv; #define WINDONWNAME "画矩形" void onMouse(int event, int x, int y, int flag,

Windows鼠标键盘消息处理

1 #include <windows.h> 2 #include <tchar.h> //swprintf_s函数所需的头文件 3 4 #pragma comment(lib, "winmm.lib") //playSound 5 #pragma comment(lib, "Msimg32.lib") //TransparentBlt 6 7 #define WINDOW_WIDTH 800 8 #define WINDOW_HEIGHT

opencv鼠标画矩形

程序: 核心函数: 回调函数,注册回调函数cvSetMouseCallback 代码: #include "cv.h" #include "cxcore.h" #include "highgui.h" #include <iostream> CvRect rect=cvRect(-1,-1,0,0); CvPoint pt1=cvPoint(0,0); CvPoint pt2=cvPoint(0,0); bool draw=false

python selenium2 - 鼠标键盘操作

方法说明 action_chains.py模块---[鼠标键盘动作] 1 __init__ #创建一个actionChains,需要传入一个实例化了的webdriver对象 2 3 click #单击元素指定元素 4 click_and_hold #在指定元素按下鼠标和release配套使用 5 context_click #右击 6 double_click #双击 7 drag_and_drop #拖曳动作 8 drag_and_drop_by_offset #从当前元素按下鼠标左键往指定的

常规鼠标键盘钩子.映像劫持.开机自启动

using System;using System.Collections.Generic;using System.IO;using System.Windows.Forms;using System.Runtime.InteropServices;using System.Reflection; namespace HookTest{ /* 注意: 如果运行中出现SetWindowsHookEx的返回值为0,这是因为.net 调试模式的问题,具体的做法是禁用宿主进程,在 Visual Stu