【问题标题】:OpenCV hangs when using multiprocessing on a Raspberry Pi在 Raspberry Pi 上使用多处理时 OpenCV 挂起
【发布时间】:2018-03-13 06:22:52
【问题描述】:

此代码按预期运行,并给出预期输出

import multiprocessing
import cv2
import os

path = r"/home/pi/Desktop/calibration.jpg"
image = cv2.imread(path)

def cvtcolor(img):
    print "converting to gray ..."
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    print "converted to gray"

if True:
    p = multiprocessing.Process(name='test',
                          target=cvtcolor,
                          kwargs={'img':image}
                                      )
    p.start()
    p2 = multiprocessing.Process(name='test',
                          target=cvtcolor,
                          kwargs={'img':image}
                                      )
    p2.start()

输出:

converting to gray ...
converting to gray ...
converted to gray
converted to gray

但是,这段代码在执行时会挂起

import multiprocessing
import cv2
import os

path = r"/home/pi/Desktop/calibration.jpg"
image = cv2.imread(path)

def cvtcolor(img):
    print "converting to gray ..."
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    print "converted to gray"


cvtcolor(image)

if True:
    p = multiprocessing.Process(name='test',
                          target=cvtcolor,
                          kwargs={'img':image}
                                      )
    p.start()

在主进程中执行的函数继续执行,但在“测试”进程中执行的函数永远挂起

converting to gray ...
converted to gray
converting to gray ...

我使用的是 OpenCV 3.2.0 版,详细安装在 Raspbian Jessie (raspberry pi) 上的 here

有人对此有解释/解决方案吗?

【问题讨论】:

  • 最后添加p.join() 有帮助吗?抱歉,我对 Python 知之甚少。
  • 不,它没有帮助,我需要它在后台运行

标签: opencv raspberry-pi multiprocessing


【解决方案1】:

看看返回了什么。如果您直接尝试 BGR2GRAY,您将得到一个形状属性与输入图像相同但只有 1 种颜色的数组,例如灰色的。当您使用多处理运行相同的函数时,您不会得到返回的数组。它将没有形状属性,尝试打印输出以查看它的形式,然后可能从中重建图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 2015-01-26
    • 2015-04-01
    • 2013-06-25
    • 2017-04-01
    • 1970-01-01
    相关资源
    最近更新 更多