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中的Descriptor描述符学习教程
Jun 02 Python
Python 常用 PEP8 编码规范详解
Jan 22 Python
从CentOS安装完成到生成词云python的实例
Dec 01 Python
对Python中的@classmethod用法详解
Apr 21 Python
python模糊图片过滤的方法
Dec 14 Python
Python3.7 dataclass使用指南小结
Feb 22 Python
Python3标准库之functools管理函数的工具详解
Feb 27 Python
使用Python发现隐藏的wifi
Mar 04 Python
python实现录音功能(可随时停止录音)
Oct 26 Python
4款Python 类型检查工具,你选择哪个呢?
Oct 30 Python
pymysql模块使用简介与示例
Nov 17 Python
Python可以用来做什么
Nov 23 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
php 带逗号千位符数字的处理方法
2012/01/10 PHP
php计算十二星座的函数代码
2012/08/21 PHP
PHP错误提示的关闭方法详解
2013/06/23 PHP
ThinkPHP表单数据智能写入create方法实例分析
2015/09/27 PHP
PHP实现登录注册之BootStrap表单功能
2017/09/03 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
jquery实现input框获取焦点的简单实例
2017/01/26 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
2017/07/06 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
[19:24]DOTA2客户端使用指南 一分钟快速设置轻松超神
2013/09/24 DOTA
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
跟老齐学Python之有容乃大的list(1)
2014/09/14 Python
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
2018/04/27 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
Django中的用户身份验证示例详解
2019/08/07 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
Python Tkinter Entry和Text的添加与使用详解
2020/03/04 Python
python爬虫使用requests发送post请求示例详解
2020/08/05 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
研究生毕业自我鉴定范文
2014/03/27 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
基于docker安装zabbix的详细教程
2022/06/05 Servers