15

これはおそらく、OpenCV を使用しているときに遭遇した最も奇妙なエラーの 1 つです。たくさんのことが起こっているので、これを私の能力の限り説明しようとしましょう。

  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 (インポート 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)
>>> 
4

2 に答える 2

3

違う

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

from os.path import abspath, join, dirname

imagePath = abspath( join(dirname(__file__), "1.jpg") )
于 2012-07-26T05:19:48.407 に答える