1. 程式人生 > 程式設計 >opencv python在視屏上截圖功能的實現

opencv python在視屏上截圖功能的實現

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 = ","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),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,的不同,x 代表的影象的列,y是代表著行
frame[w:ew,h:eh]這個先是行,再是列。

總結

到此這篇關於opencv python在視屏上截圖的文章就介紹到這了,更多相關opencv 視屏截圖內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!