2012-07-03 29 views
9

這可能是我在使用OpenCV時遇到過的最奇怪的錯誤之一。有很多事情要做,所以讓我盡我所能解釋這一點。OpenCV imread在網絡請求中調用時掛起

  1. 我一起使用Django web框架和OpenCV(cv2)。我試圖從Django的視圖中讀取我的磁盤上的文件。

    imagePath = os.path.dirname(__file__) + "/1.jpg" 
    

    基本上,在與views.py文件相同的路徑中有一個名爲「1.jpg」的文件。這就是所有這些代碼正在做的事情。很簡單。但下一步就是事情變得瘋狂。

  2. 現在,我想讀取位於'imagePath'的圖像文件。這需要呼叫cv2.imread

    image = cv2.imread(imagePath) 
    

    但這是我的問題開始的地方。不知何故,Apache(或者甚至OpenCV,我無法知道)開始掛起,並且文件從不加載。沒有錯誤信息,沒有任何東西。

做一些偵探工作我決定嘗試一箇舊版本的OpenCV(import cv)。奇怪的是,當我調用cv.LoadImage(imagePath)時,Apache不會掛起,我的圖像加載得很好。我完全不知道爲什麼。

潛在的解決我的問題的方法是使用PIL。

from PIL import Image 
import numpy as np 
image = Image.open(imagePath) 
image = np.asarray(image) 

一再次使用PIL Apache不掛,我可以繼續按正常的我的形象表現爲numpy的陣列和應用任何CV2功能吧。

但是,我不是一個解決變通辦法和cv2.imread懸掛真的困擾我的事實。

有沒有人碰到過這個?

編輯:從Python外殼使用cv.imread工作正常,它只是從一個Apache請求掛起發生。

>>> import cv2 
>>> image = cv2.imread("1.jpg") 
>>> image.shape 
(400, 344, 3) 
>>> 
+0

我正在運行的OpenCV 2.4.1當這個問題發生。然後編譯並安裝2.4.0,無論出於何種原因,imread不再掛起。很奇怪。 –

+0

我有使用OpenCV 2.4.2的相同問題,確實奇怪... – Tickon

+0

最近我遇到了這個問題,有沒有修復舊的OpenCV版本?它似乎使用OpenCV 2.4.6.1正常工作。 – Mailerdaimon

回答

3

錯誤

imagePath = os.path.dirname(__file__) + "/1.jpg" 

from os.path import abspath, join, dirname 

imagePath = abspath(join(dirname(__file__), "1.jpg")) 
2

我也有類似的問題,並找到了解決 - >只需添加到您的Apache配置:

WSGIScriptAlias application-group=%{GLOBAL} 

顯然,這發生在你有擴展模塊n時不適用於分譯員。上述強迫它在主要翻譯中運行。

來源: django apache mod-wsgi hangs on importing a python module from .so file http://blog.rtwilson.com/how-to-fix-flask-wsgi-webapp-hanging-when-importing-a-module-such-as-numpy-or-matplotlib/

+0

謝謝。拯救了我的一天! – valter

+0

非常感謝! – robrant