如何裁剪已调整大小的视频流?
How do I crop a video steam that's already been resized?
我正在使用 PIL ImageGrab
函数实时捕获应用程序 window 以使用 OpenCV 进行图像检测。我设法缩小捕获的 window 以提高图像检测速度。但是,我收到了一些我似乎无法避免的误报。我其实只需要截取一小段 window 761 34 1142 68
while True:
# Grab PSS Window and find size
window = pygetwindow.getWindowsWithTitle('App')[0]
x1 = window.left
y1 = window.top
height = window.height
width = window.width
x2 = x1 + width
y2 = y1 + height
# Actual Video Loop, cropped down to the specific window,
# resized to 1/2 size, and converted to BGR for OpenCV
haystack_img = ImageGrab.grab(bbox=(x1, y1, x2, y2))
(width, height) = (haystack_img.width // 2, haystack_img.height // 2)
haystack_img_resized = haystack_img.resize((width, height))
########### Line in Question ##############
haystack_img_cropped = haystack_img_resized[761: 34, 1142:68]
haystack_img_np = np.array(haystack_img_cropped)
haystack = cv.cvtColor(haystack_img_np, cv.COLOR_BGR2GRAY)
cv.imshow("Screen", haystack)
我尝试使用 OpenCV 对图像进行切片,但出现错误:
C:\Users\coyle\OneDrive\froggy-pirate-master\avoidShips>C:/Users/coyle/AppData/Local/Programs/Python/Python39/python.exe c:/Users/coyle/OneDrive/froggy-pirate-master/avoidShips/avoidShipActual/test7.py
Traceback (most recent call last):
File "c:\Users\test7.py", line 103, in <module>
objectDetection(ships_to_avoid, 0.92)
File "c:\Users\test7.py", line 61, in objectDetection
haystack_img_cropped = haystack_img_resized[761:34, 1142:68]
TypeError: 'Image' object is not subscriptable
我尝试了 .crop
方法:
haystack_img_resized = haystack_img.resize((width, height))
haystack_img_resized.crop((761,34,1164,65))
haystack_img_np = np.array(haystack_img_resized)
它没有产生任何错误,但实际上并没有裁剪任何东西。
如何裁剪我的视频流?
不知道为什么,但是将裁剪后的图像加载到变量中并使用该变量有效。
crop = haystack_img_resized.crop((761,34,1164,65))
haystack_img_np = np.array(crop)
haystack_img_cropped = np.array(haystack_img_resized)[761: 34, 1142:68]
应该可以。
对于您的问题,
- 切片前必须将PIL的Image转换为Numpy的array。
.crop()
returns 新修改的 PIL 图像实例,而不是修改现有的图像实例。 PIL 的方法通常 return 一个新的 Image 实例。
我正在使用 PIL ImageGrab
函数实时捕获应用程序 window 以使用 OpenCV 进行图像检测。我设法缩小捕获的 window 以提高图像检测速度。但是,我收到了一些我似乎无法避免的误报。我其实只需要截取一小段 window 761 34 1142 68
while True:
# Grab PSS Window and find size
window = pygetwindow.getWindowsWithTitle('App')[0]
x1 = window.left
y1 = window.top
height = window.height
width = window.width
x2 = x1 + width
y2 = y1 + height
# Actual Video Loop, cropped down to the specific window,
# resized to 1/2 size, and converted to BGR for OpenCV
haystack_img = ImageGrab.grab(bbox=(x1, y1, x2, y2))
(width, height) = (haystack_img.width // 2, haystack_img.height // 2)
haystack_img_resized = haystack_img.resize((width, height))
########### Line in Question ##############
haystack_img_cropped = haystack_img_resized[761: 34, 1142:68]
haystack_img_np = np.array(haystack_img_cropped)
haystack = cv.cvtColor(haystack_img_np, cv.COLOR_BGR2GRAY)
cv.imshow("Screen", haystack)
我尝试使用 OpenCV 对图像进行切片,但出现错误:
C:\Users\coyle\OneDrive\froggy-pirate-master\avoidShips>C:/Users/coyle/AppData/Local/Programs/Python/Python39/python.exe c:/Users/coyle/OneDrive/froggy-pirate-master/avoidShips/avoidShipActual/test7.py
Traceback (most recent call last):
File "c:\Users\test7.py", line 103, in <module>
objectDetection(ships_to_avoid, 0.92)
File "c:\Users\test7.py", line 61, in objectDetection
haystack_img_cropped = haystack_img_resized[761:34, 1142:68]
TypeError: 'Image' object is not subscriptable
我尝试了 .crop
方法:
haystack_img_resized = haystack_img.resize((width, height))
haystack_img_resized.crop((761,34,1164,65))
haystack_img_np = np.array(haystack_img_resized)
它没有产生任何错误,但实际上并没有裁剪任何东西。
如何裁剪我的视频流?
不知道为什么,但是将裁剪后的图像加载到变量中并使用该变量有效。
crop = haystack_img_resized.crop((761,34,1164,65))
haystack_img_np = np.array(crop)
haystack_img_cropped = np.array(haystack_img_resized)[761: 34, 1142:68]
应该可以。
对于您的问题,
- 切片前必须将PIL的Image转换为Numpy的array。
.crop()
returns 新修改的 PIL 图像实例,而不是修改现有的图像实例。 PIL 的方法通常 return 一个新的 Image 实例。