簡體   English   中英

Python OpenCV imshow 預期的墊子參數

[英]Python OpenCV imshow Expected mat Argument

我正在嘗試編寫一個程序,在給定的 window 上顯示特定的 position。 當我運行代碼 OpenCV 時,我會收到一條錯誤消息,告訴我參數墊的意外類型。 我不知道出了什么問題,因為當我在以下代碼中使用 position 值時,它可以正常工作。 請善待,因為我對 OpenCV 還很陌生。

代碼:

#Imports
import numpy as np
import cv2
import pytesseract
from PIL import ImageGrab
import win32gui


#Assign Tesseract and other Variables
winList = []
toplist = []
pytesseract.pytesseract.tesseract_cmd = r'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
lH = 33
lW = 20

#Window Handle Object
def enum_win(hwnd, result):

    winText = win32gui.GetWindowText(hwnd)

    winList.append((hwnd, winText))

win32gui.EnumWindows(enum_win, toplist)


typeHwnd = 0

#Find Window Handle
for (hwnd, winText) in winList:

    if winText == "Program WinText Name Here":
        typeHwnd = hwnd
if typeHwnd == 0:
    print("Oops no Window Found")


while True:
    position = win32gui.GetWindowRect(typeHwnd)

    mid = (position[0] + (position[0] + position[2]))/2

    sPos = [int(mid)-267, position[1] + 295, lW, lH]

    screenshot = ImageGrab.grab(bbox=sPos)
    screenshot = np.array(screenshot)

    cv2.imshow("Screen", screenshot)
    key = cv2.waitKey(25)

print(position)
print(mid)

錯誤信息:

Traceback (most recent call last):
  File "C:/Users/MyName/PycharmProjects/Typing Bot/main.py", line 47, in <module>
    cv2.imshow("Screen", screenshot)
TypeError: Expected Ptr<cv::UMat> for argument 'mat'

系統規格:

我正在運行 Windows 10 64 位和 Python 3 並安裝了所有導入模塊的最新版本。

錯誤顯示imshow中的array存在問題,但您的問題從grab中的sPos開始。

bbox grab這意味着[x1, y1, x2, y2]但您使用[x, y, width, height]這會引發問題,因為grab返回大小為(0,0)的圖像而np.array()不能將其轉換為返回pillow image而不是numpy array ,然后imshow獲取pillow image而不是numpy array並且無法顯示它。


你必須使用[x, y, x+width, y+height]


最小的工作示例 - 錯誤和正確的pos

import cv2
import numpy as np
import PIL.ImageGrab

x = 100
y = 100
w = 50 
h = 50 

pos = [x, y, w, h]      # wrong 
#pos = [x, y, x+w, y+h]  # correct 

print('bbox:', pos)
print('---')

img = PIL.ImageGrab.grab(pos)
print('img:', img)
print('type(img):', type(img))
print('img.size:', img.size)
print('---')

arr = np.array(img)
print('arr:', arr)
print('type(arr):', type(arr))
print('arr.size:', arr.size)
print('arr.shape:', arr.shape)
print('---')

cv2.imshow('test', arr)

print('Press ESC to exit')
while cv2.waitKey(100) != 27:
    pass

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM