opencvpython在视屏上截图功能的实现
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⽉开始实现。
介绍
因为我是⼀个⼩⽩,所以代码就⽐较简单,如果有错误,希望⼤家可以评论下告诉我,感激。
效果
蓝⾊框框是我们要截下的图
这是截完后的图
代码
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 = py()
cv2.imshow("frame", img)
f2 = 1
eh = x
ew = y
#当执⾏了以上的两步时候,并且左键是松开的,就可以进⾏截出⼀张图⽚。rectangle函数opencv
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 = ad()
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 视屏截图内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!