顯示具有 OpenCV 標籤的文章。 顯示所有文章
顯示具有 OpenCV 標籤的文章。 顯示所有文章

2016年11月27日 星期日

用Python動態擷取特定程式畫面並用opencv輸出

想用Python抓取特定軟體視窗的畫面,並用opencv處理後輸出,google完發現了這幾篇:
1.使用win32gui抓取特定視窗的邊界
2. 用PIL+opencv抓取並顯示特定範圍的顯示畫面
3. python win32的文件

以下是抓取小算盤轉灰階後輸出的範例(window 10/python3.5):
from PIL import ImageGrab
import numpy as np
import cv2
import win32gui

hwnd = win32gui.FindWindow(None, '小算盤')

while True:
    try :
        left, top, right, bot = win32gui.GetWindowRect(hwnd)
    except :
        print("找不到視窗")
        break
    img = ImageGrab.grab(bbox = (left, top, right, bot))
    img_np = np.array(img)
    frame = cv2.cvtColor(img_np, cv2.COLOR_BGR2GRAY)
    cv2.imshow("screen box", frame)
    k = cv2.waitKey(30)&0xFF #64bits! need a mask
    if k ==27:
        cv2.destroyAllWindows()
        break

目前有幾個問題:
1. 視窗的名稱該如何擷取?
2. 目前是抓取該程式的畫面相對位置,如果該程式縮到最小或被其他程式蓋過,還是會持續抓取該位置的畫面。 如果希望持續擷取該程式的畫面該怎麼作?
 3. 有時候抓到的相對位置和實際位置會有一點點落差。

2016年2月19日 星期五

在Windows上用Python運行Opencv的設定

主要是參考Opencv官方文件
但因為目前只支援Python 2.7,讓原本已經安裝3.5的電腦安裝起來有些麻煩,在此紀錄一下重頭安裝可能會遇到的問題。

首先需要的安裝檔案有:

  1. Python 2.7.x 版本
  2. Microsoft Visual C++ Compiler for Python 2.7
  3. OpenCV for Windows
依序載完後,先安裝 Python 2.7.x,再參考這篇設置環境變數,依照每個人安裝路徑不同要做修改。如果安裝時沒有修改路徑,應該要新增
;C:\Python27;C:\Python27\Scripts
到path。小心分號;前後不能有空白。



完成設置後,可以打開cmd用
python -V
pip -V
確定安裝與設定是否成功。

因為預設的pip版本比較舊,可用

python -m pip install -U pip

更新之

接下來就是安裝 Microsoft Visual C++ Compiler for Python 2.7,因為numpy會用到。

完成安裝後,一樣打開cmd,依序輸入:
pip install numpy
pip install matplotlib



最後把3.OpenCV for Windows解壓縮,找到opencv\build\python\2.7\X64裡的cv2.pyd,複製到C:\Python27\Lib\site-packages,依你的安裝路徑而定。
至此設定就完成了

可以用cmd確定安裝是否成功:
python
import cv2
print cv2.__version__



用此方法安裝了三台windows 10都OK,但如果要和Python3並存,就要再研究看看了。