欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實現(xiàn)錄制全屏和選擇區(qū)域錄屏功能

 更新時間:2021年02月05日 11:36:43   作者:nihate  
這篇文章主要介紹了python實現(xiàn)錄制全屏和選擇區(qū)域錄屏功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

最近給客戶演示程序運行結果,我就想到用Python寫一個錄屏程序,在網(wǎng)上能找到現(xiàn)成的源碼,但是它的錄屏是錄制整個屏幕的。但是在屏幕桌面下方的任務欄工具欄里有些東西,不希望被錄制到視頻里,因此需要實現(xiàn)一個選擇區(qū)域錄屏,就像qq截圖那樣的。我編寫的程序如下,在主函數(shù)的輸入?yún)?shù)里有一個選項控制是全屏錄制還是選擇區(qū)域錄制。在編寫這個程序時,我有一個疑問,在初始化寫視頻VideoWriter函數(shù)的第4個參數(shù),它表示視頻幀的高和寬,全屏錄制方式的參數(shù)是(height,width),選擇區(qū)域錄制的參數(shù)是(width,height)。我曾嘗試過把這個參數(shù)統(tǒng)一寫成(height,width)或者(width,height)。但是運行程序后,總有一種錄屏方式保存的視頻文件是無法打開的,文件大小是1kb,不知這是為何?

import cv2
from PIL import ImageGrab
import numpy as np
import argparse
import time
 
global img
global point1, point2
 
def on_mouse(event, x, y, flags, param):
  global img, point1, point2
  img2 = img.copy()
  if event == cv2.EVENT_LBUTTONDOWN: # 左鍵點擊
    point1 = (x, y)
    cv2.circle(img2, point1, 10, (0, 255, 0), thickness=2)
    cv2.imshow('image', img2)
  elif event == cv2.EVENT_MOUSEMOVE and (flags & cv2.EVENT_FLAG_LBUTTON): # 按住左鍵拖曳
    cv2.rectangle(img2, point1, (x, y), (255, 0, 0), thickness=2)
    cv2.imshow('image', img2)
  elif event == cv2.EVENT_LBUTTONUP: # 左鍵釋放
    point2 = (x, y)
    cv2.rectangle(img2, point1, point2, (0, 0, 255), thickness=2)
    cv2.imshow('image', img2)
 
def select_roi(frame):
  global img, point1, point2
  img = cv2.cvtColor(np.array(frame), cv2.COLOR_RGB2BGR)
  winname = 'image'
  cv2.namedWindow(winname, cv2.WINDOW_NORMAL)
  cv2.setWindowProperty(winname, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
  cv2.setMouseCallback(winname, on_mouse)
  cv2.imshow(winname, img)
  cv2.waitKey(0)
  cv2.destroyAllWindows()
  return point1, point2
 
if __name__ == '__main__':
  parser = argparse.ArgumentParser()
  parser.add_argument('--fps', type=int, default=10, help='frame per second')
  parser.add_argument('--total_time', type=int, default=15, help='video total time')
  parser.add_argument('--savename', type=str, default='video.mp4', help='save file name')
  parser.add_argument('--screen_type', default=1, type=int, choices=[0, 1], help='1: full screen, 0: region screen')
  args = parser.parse_args()
 
  print('等到3秒,請切換到錄屏的頁面')
  if args.screen_type==0:
    print('Press Esc to close window')
  time.sleep(3)
 
  curScreen = ImageGrab.grab() # 獲取屏幕對象
  if args.screen_type:
    height, width = curScreen.size
    min_x, min_y, max_x, max_y = 0, 0, width, height
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    video = cv2.VideoWriter(args.savename, fourcc, args.fps, (height, width))
  else:
    point1, point2 = select_roi(curScreen)
    min_x = min(point1[0], point2[0])
    min_y = min(point1[1], point2[1])
    max_x = max(point1[0], point2[0])
    max_y = max(point1[1], point2[1])
    height, width = max_y - min_y, max_x - min_x
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    video = cv2.VideoWriter(args.savename, fourcc, args.fps, (width, height))
 
  imageNum = 0
  while True:
    imageNum += 1
    captureImage = ImageGrab.grab() # 抓取屏幕
    frame = cv2.cvtColor(np.array(captureImage), cv2.COLOR_RGB2BGR)
    if args.screen_type==0:
      frame = frame[min_y:max_y, min_x:max_x, :]
    
    if imageNum < args.fps * args.total_time:
      video.write(frame)
    # 退出條件
    if cv2.waitKey(50) == ord('q') or imageNum > args.fps * args.total_time:
      break
  video.release()
  cv2.destroyAllWindows()

到此這篇關于python實現(xiàn)錄制全屏和選擇區(qū)域錄屏功能的文章就介紹到這了,更多相關python錄屏內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 用Python進行行為驅動開發(fā)的入門教程

    用Python進行行為驅動開發(fā)的入門教程

    這篇文章主要介紹了用Python進行行為驅動開發(fā)的入門教程,本文也對BDD的概念做了詳細的解釋,需要的朋友可以參考下
    2015-04-04
  • Python中列表(list)操作方法匯總

    Python中列表(list)操作方法匯總

    這篇文章主要介紹了Python中列表(list)操作方法匯總,非常實用的技巧,需要的朋友可以參考下
    2014-08-08
  • 查看Python安裝路徑幾種方法

    查看Python安裝路徑幾種方法

    在使用python的時候,有時候會需要找到python包的安裝位置,本文主要介紹了查看Python安裝路徑幾種方法,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Python中unittest的數(shù)據(jù)驅動詳解

    Python中unittest的數(shù)據(jù)驅動詳解

    這篇文章主要介紹了Python中unittest的數(shù)據(jù)驅動詳解,數(shù)據(jù)驅動測試,是一種單元測試框架,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • Python openpyxl讀取單元格字體顏色過程解析

    Python openpyxl讀取單元格字體顏色過程解析

    這篇文章主要介紹了Python openpyxl讀取單元格字體顏色過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Python基于回溯法子集樹模板解決馬踏棋盤問題示例

    Python基于回溯法子集樹模板解決馬踏棋盤問題示例

    這篇文章主要介紹了Python基于回溯法子集樹模板解決馬踏棋盤問題,簡單描述了國際象棋馬踏棋盤問題,并結合實例形式分析了Python使用回溯法子集樹模板解決馬踏棋盤問題的具體步驟與相關操作注意事項,需要的朋友可以參考下
    2017-09-09
  • Python模擬登錄的多種方法(四種)

    Python模擬登錄的多種方法(四種)

    這篇文章主要介紹了Python模擬登錄的多種方法,大概給大家提供了四種方法,每種方法給大家介紹的都很詳細,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-06-06
  • python如何獲得list或numpy數(shù)組中最大元素對應的索引

    python如何獲得list或numpy數(shù)組中最大元素對應的索引

    這篇文章主要介紹了python如何獲得list或numpy數(shù)組中最大元素對應的索引,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Python學習筆記之json模塊和pickle模塊

    Python學習筆記之json模塊和pickle模塊

    json和pickle模塊是將數(shù)據(jù)進行序列化處理,并進行網(wǎng)絡傳輸或存入硬盤,下面這篇文章主要給大家介紹了關于Python學習筆記之json模塊和pickle模塊的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • 使用Python?http.server模塊共享文件的方法詳解

    使用Python?http.server模塊共享文件的方法詳解

    大家好,今天給大家介紹一下Python標準庫中的http.server模塊,這個模塊提供了一種簡單的方式來快速啟動一個HTTP服務器,文中給大家介紹了使用Python?http.server模塊共享文件的方法,需要的朋友可以參考下
    2024-05-05

最新評論