我目前正在使用带有python 3.4的OpenCV 3。我的机器是带有OS X 10.10(Yosemite)的MacBook Pro,当我使用OpenCV中的一些功能和多处理库时,我遇到了问题。这是一个(非常)简化的示例代码,它重现了错误:
import multiprocessing
import numpy
import cv2
class Sample():
def __init__(self):
self.mask = [] # Testing
def experiment(self):
img = cv2.imread("/Users/luigolas/PycharmProjects/PyReid/tests/test_resources/P2/cam1/P2_001_cam1_1.png")
self.mask.append(segment(img))
print("Segmented!")
processes = [multiprocessing.Process(target=self._func) for i in range(3)]
_ = [p.start() for p in processes]
_ = [p.join() for p in processes]
def _func(self):
img = cv2.imread("/Users/luigolas/PycharmProjects/PyReid/tests/test_resources/P2/cam2/P2_001_cam2_1.png")
cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
print("Done!!")
def segment(image):
bgdmodel = numpy.zeros((1, 65), numpy.float64)
fgdmodel = numpy.zeros((1, 65), numpy.float64)
mask_source = "/Users/luigolas/PycharmProjects/PyReid/resources/masks/OptimalMask.txt"
mask = numpy.loadtxt(mask_source, numpy.uint8)
cv2.grabCut(image, mask, None, bgdmodel, fgdmodel, 2, cv2.GC_INIT_WITH_MASK)
mask = numpy.where((mask == 2) | (mask == 0), 0, 1).astype('uint8')
return mask
if __name__ == '__main__':
t = Sample()
t.experiment()
问题在于它永远不会达到“完成!!”打印,因为它中断显示OS X错误消息。完整的错误消息在此GIST
中我已经坚持了一段时间,并且无法找到此错误的确切原因。如果我不运行“cvtcolor”命令,则根本没有问题。以及如果没有运行“grabcut”命令......
UDATE: 在_func方法中,如果我添加打印或创建文件作为第一条指令,则打印并创建该文件,这意味着该过程已启动。 当执行grabcut(在段函数中)和cvtcolor时,会出现问题。如果其中一个没有执行,则完全没有问题。怎么可以相关?
我也尝试使用multiprocessing.dummy.Process
并且它有效。
OpenCV可能存在问题吗?
答案 0 :(得分:0)
好吧我终于解决了。这是编译和编译的一个问题。安装OpenCV。无法确切地说出错误,但我检查了homebrew如何配置OpenCV并对其进行了调整(添加了python 3支持)。
感谢您的帮助。