opencv python在视屏上截图功能的实现


Posted in Python onMarch 05, 2020

OpenCV简介

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ch、Ruby,GO的支持。
所有新的开发和算法都是用C++接口。一个使用CUDA的GPU接口也于2010年9月开始实现。

介绍

因为我是一个小白,所以代码就比较简单,如果有错误,希望大家可以评论下告诉我,感激。

效果

蓝色框框是我们要截下的图

opencv python在视屏上截图功能的实现

这是截完后的图

opencv python在视屏上截图功能的实现

代码

import cv2
import numpy as np
import matplotlib.pyplot as plt
i = w = h = f1 = f2 = ew = eh = 0

def cut(event, x, y, flags, param):
  global i,w,h, f1,f2,ew,eh
  img = 0
  #这一个if的作用是,当鼠标左键按下,记录开始的位置
  if event == cv2.EVENT_LBUTTONDOWN:
    f1 = 1
    h = x
    w = y
    print("w = ", w, "h = ", h)
  #这一步的作用是当鼠标滑动时,并且左键是按下的时候,就画一个框框,并且记录左后一个位置
  if event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLAG_LBUTTON:
    img = frame.copy()
    cv2.rectangle(img, (h,w), (x,y), (255,0,0),5)
    cv2.imshow("frame", img)
    f2 = 1
    eh = x
    ew = y
  #当执行了以上的两步时候,并且左键是松开的,就可以进行截出一张图片。
  if f1 == 1 and f2 == 1 and event == cv2.EVENT_LBUTTONUP:
    #下面两个if是向各个方向上截图的考虑
    if ew < w:
      w,ew = ew,w
    if eh < h:
      eh,h = h, eh
    i += 1
    f1 = f2 = 0
    img = frame[w:ew, h:eh]
    path = "C:/test2/" + "%d"%i+".jpg"
    cv2.imwrite(path,img)
#这时创建一个对像
cap = cv2.VideoCapture("C:/test2/bbb.mp4")
#这是命名一个窗口,与下面的鼠标结合,鼠标会在这个窗口中产生效果
cv2.namedWindow("frame",cv2.WINDOW_NORMAL)
cv2.setMouseCallback("frame",cut)
while True:
 #读取图片
  ret, frame = cap.read()
  if ret == False:
    break
  cv2.imshow("frame", frame)
  #如果输入'c',就进行切割。
  if cv2.waitKey(10) == ord("c"):
    cv2.waitKey(0)
  if cv2.waitKey(10) == ord('q'):
    break

注意

x,y和 w,h, 的不同,x 代表的图像的列,y是代表着行
frame[w:ew, h:eh]这个先是行,再是列。

总结

到此这篇关于opencv python在视屏上截图的文章就介绍到这了,更多相关opencv 视屏截图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python使用urllib模块的urlopen超时问题解决方法
Nov 08 Python
python读取json文件并将数据插入到mongodb的方法
Mar 23 Python
对于Python编程中一些重用与缩减的建议
Apr 14 Python
Python实现控制台输入密码的方法
May 29 Python
使用Python保存网页上的图片或者保存页面为截图
Mar 05 Python
python3操作mysql数据库的方法
Jun 23 Python
Django的分页器实例(paginator)
Dec 01 Python
TensorFlow实现卷积神经网络
May 24 Python
python保存数据到本地文件的方法
Jun 23 Python
python实现停车管理系统
Nov 30 Python
Django框架教程之中间件MiddleWare浅析
Dec 29 Python
实例代码讲解Python 线程池
Aug 24 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
Mar 05 #Python
python如何将两张图片生成为全景图片
Mar 05 #Python
Python 定义只读属性的实现方式
Mar 05 #Python
Pycharm中import torch报错的快速解决方法
Mar 05 #Python
Python中私有属性的定义方式
Mar 05 #Python
Python实现AI自动抠图实例解析
Mar 05 #Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
Mar 05 #Python
You might like
建立文件交换功能的脚本(二)
2006/10/09 PHP
php修改时间格式的代码
2011/05/29 PHP
php实现mysql封装类示例
2014/05/07 PHP
PHP延迟静态绑定示例分享
2014/06/22 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
javascript高亮效果的二种实现方法
2008/09/14 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
2016/05/05 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
Nodejs之http的表单提交
2017/07/07 NodeJs
JS实现元素上下左右移动效果
2017/10/18 Javascript
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
30分钟快速实现小程序语音识别功能
2018/11/27 Javascript
js+css实现扇形导航效果
2020/08/18 Javascript
解决Element中el-date-picker组件不回填的情况
2020/11/07 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
Python中的字典与成员运算符初步探究
2015/10/13 Python
python字符串,数值计算
2016/10/05 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
用python写测试数据文件过程解析
2019/09/25 Python
Python实现括号匹配方法详解
2020/02/10 Python
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
美团网旗下网上订餐平台:美团外卖
2020/03/05 全球购物
Linux开机引导的步骤是什么
2015/10/19 面试题
初中班主任经验交流材料
2014/05/16 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
复试通知单模板
2015/04/24 职场文书