我正在使用Python 2.7和OpenCV 2.4。9
我需要捕获显示给用户的当前帧,并将其加载为Python中的cv::Mat对象。
你们知道一种快速递归的方法吗?
我需要像下面的例子中所做的那样,从网络摄像头递归地捕获Mat帧:
import cv2
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
ret, frame = cap.read()
cv2.imshow('WindowName', frame)
if cv2.waitKey(25) & 0xFF == ord('q'):
cap.release()
cv2.destroyAllWindows()
break
在本例中,它使用了VideoCapture类来处理从网络摄像头捕获的图像。
用视频捕捉。read()新帧总是被读取并存储到Mat对象中。
我可以将“打印屏幕流”加载到视频捕获对象中吗?我可以用Python中的OpenCV创建计算机屏幕的流媒体,而不必保存和删除大量数据。每秒bmp文件数?
我需要这个帧是Mat对象或NumPy数组,所以我可以用这个帧实时执行一些计算机视觉例程。
这是@Neabfi回答的更新答案
import time
import cv2
import numpy as np
from mss import mss
mon = {'top': 160, 'left': 160, 'width': 200, 'height': 200}
with mss() as sct:
# mon = sct.monitors[0]
while True:
last_time = time.time()
img = sct.grab(mon)
print('fps: {0}'.format(1 / (time.time()-last_time)))
cv2.imw('test', np.array(img))
if cv2.waitKey(25) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break
并保存到MP4视频
import time
import cv2
import numpy as np
from mss import mss
def record(name):
with mss() as sct:
# mon = {'top': 160, 'left': 160, 'width': 200, 'height': 200}
mon = sct.monitors[0]
name = name + '.mp4'
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
desired_fps = 30.0
out = cv2.VideoWriter(name, fourcc, desired_fps,
(mon['width'], mon['height']))
last_time = 0
while True:
img = sct.grab(mon)
# cv2.imshow('test', np.array(img))
if time.time() - last_time > 1./desired_fps:
last_time = time.time()
destRGB = cv2.cvtColor(np.array(img), cv2.COLOR_BGRA2BGR)
out.write(destRGB)
if cv2.waitKey(25) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break
record("Video")
我有帧速率问题与其他解决方案,mss解决他们。
import numpy as np
import cv2
from mss import mss
from PIL import Image
mon = {'top': 160, 'left': 160, 'width': 200, 'height': 200}
sct = mss()
while 1:
sct.get_pixels(mon)
img = Image.frombytes('RGB', (sct.width, sct.height), sct.image)
cv2.imshow('test', np.array(img))
if cv2.waitKey(25) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break
这是我用@Raoul技巧编写的解决方案代码。
我使用PIL ImageGrab模块来抓取打印屏幕帧。
import numpy as np
from PIL import ImageGrab
import cv2
while(True):
printscreen_pil = ImageGrab.grab()
printscreen_numpy = np.array(printscreen_pil.getdata(),dtype='uint8')\
.reshape((printscreen_pil.size[1],printscreen_pil.size[0],3))
cv2.imshow('window',printscreen_numpy)
if cv2.waitKey(25) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break
问题内容: 我正在使用 Python 2.7 和 OpenCV 2.4.9 。 我需要捕获显示给用户的当前帧,并将其作为 cv :: Mat 对象加载到Python中。 你们知道递归的快速方法吗? 我需要类似下面示例中的操作,该操作以递归方式从网络摄像头捕获 _ Mat_ 帧: 在示例中,它使用了 VideoCapture类 来处理从网络摄像头捕获的图像。 通过VideoCapture.read(
本文向大家介绍使用Python和OpenCV捕获鼠标单击事件,包括了使用Python和OpenCV捕获鼠标单击事件的使用技巧和注意事项,需要的朋友参考一下 使用的模块: 在本文中,我们将使用Python-openCV(cv2)和NumPy模块。 Python-opencv(cv2): Python-opencv(cv2)是一个python库,它将帮助我们解决开源计算机视觉问题。 NumPy: Nu
我尝试用全高清分辨率的罗技C920摄像头捕捉视频。它提供30 fps与此分辨率。 它以30 fps的速度与windows摄像头应用程序配合使用,但无论我如何尝试,我都无法通过opencv videoCapture获得这种fps速度。 注意:我使用windows 10和vs15。我尝试了不同的usb端口,opencv版本和编解码器。结果是相同的,〜5 fps。 我测量fps忽略前10帧。下面是我的计
我试图根据用户输入的坐标捕捉区域截图。基本上,用户在屏幕上点击得到x,y坐标,然后在其他地方点击另一对x,y坐标,然后将其放入一个矩形中,并使用机器人库创建屏幕截图。 我有的问题是,我得到了随机截图,这不是用户输入的坐标,我怎么能考虑包括0的坐标,因为矩形值必须超过1。 以下是我迄今为止的代码:
我正试图用java设计一个程序,定期(每100毫秒左右)拍摄我的屏幕截图,并计算整个屏幕的平均像素rgb值。我需要这个来处理视频游戏和iTunes/Quicktime视频。然而,我曾尝试使用JNA和robot来捕获屏幕,它只在我没有捕获全屏或iTunes视频的视频游戏时起作用。例如,我通过保存一个图像来测试代码,以检查并查看发生了什么。当我玩电子游戏时,我只看到一个空白窗口的截图。我认为这是因为游
我正在尝试通过使用open CV连接cp plus ip camera到我的应用程序。我试了很多方法来捕捉画面。帮助我捕捉帧使用“RTSP”协议。IP cam的URL是“rtsp://admin:admin@192.168.1.108:554/videoinput/1/mpeg4/1”。我用VLC播放器试过这个。起作用了。如果有方法通过libvlc捕获帧并传递到open CV中,请提及该方法。