gpt4 book ai didi

python - opencv 和多处理

转载 作者:太空狗 更新时间:2023-10-29 20:16:04 27 4
gpt4 key购买 nike

我正在寻找使用 python 的多处理模块来创建一个进程,该进程通过 opencv 的 python 接口(interface)不断轮询网络摄像头,将任何生成的图像发送到其他进程可以访问它们的队列。但是,每当我尝试对队列中其他进程检索到的图像执行任何操作时,我都会遇到挂起(Ubuntu 12.04 上的 python 2.7)。这是一个最小的例子:

import multiprocessing
import cv

queue_from_cam = multiprocessing.Queue()

def cam_loop(queue_from_cam):
print 'initializing cam'
cam = cv.CaptureFromCAM(-1)
print 'querying frame'
img = cv.QueryFrame(cam)
print 'queueing image'
queue_from_cam.put(img)
print 'cam_loop done'


cam_process = multiprocessing.Process(target=cam_loop,args=(queue_from_cam,))
cam_process.start()

while queue_from_cam.empty():
pass

print 'getting image'
from_queue = queue_from_cam.get()
print 'saving image'
cv.SaveImage('temp.png',from_queue)
print 'image saved'

此代码应该运行到打印出“保存图像”但随后挂起。有什么想法可以解决这个问题吗?

最佳答案

最简单的方法是使用基于 NumPy 数组的较新的 cv2 模块。这样你就不必搞乱手动酸洗。这是解决方法(我只更改了 4 行代码):

import multiprocessing
import cv2

queue_from_cam = multiprocessing.Queue()

def cam_loop(queue_from_cam):
print 'initializing cam'
cap = cv2.VideoCapture(0)
print 'querying frame'
hello, img = cap.read()
print 'queueing image'
queue_from_cam.put(img)
print 'cam_loop done'

cam_process = multiprocessing.Process(target=cam_loop,args=(queue_from_cam,))
cam_process.start()

while queue_from_cam.empty():
pass

print 'getting image'
from_queue = queue_from_cam.get()
print 'saving image'
cv2.imwrite('temp.png', from_queue)
print 'image saved'

关于python - opencv 和多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10862532/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com