55

PHP関数のように文字列から画像を読み込もうとしていますimagecreatefromstring

どうやってやるの?

MySQL blob フィールド イメージがあります。私はMySQLdbを使用していますが、PyOpenCV で画像を操作するための一時ファイルを作成したくありません。

注: cv (cv2 ではない) ラッパー関数が必要です

4

3 に答える 3

127

これは、データベースに保存されている画像をPythonでOpenCV画像に変換するために通常使用するものです。

import numpy as np
import cv2
from cv2 import cv

# Load image as string from file/database
fd = open('foo.jpg')
img_str = fd.read()
fd.close()

# CV2
nparr = np.fromstring(img_str, np.uint8)
img_np = cv2.imdecode(nparr, cv2.CV_LOAD_IMAGE_COLOR) # cv2.IMREAD_COLOR in OpenCV 3.1

# CV
img_ipl = cv.CreateImageHeader((img_np.shape[1], img_np.shape[0]), cv.IPL_DEPTH_8U, 3)
cv.SetData(img_ipl, img_np.tostring(), img_np.dtype.itemsize * 3 * img_np.shape[1])

# check types
print type(img_str)
print type(img_np)
print type(img_ipl)

numpy.ndarrayからへの変換を追加したcv2.cv.iplimageので、上記のスクリプトは次のように出力されます。

<type 'str'>
<type 'numpy.ndarray'>
<type 'cv2.cv.iplimage'>

編集: 最新の numpy の時点で、警告が発生1.18.5 +するため、その場所で使用する必要があります。np.fromstringnp.frombuffer

于 2013-06-18T13:57:15.840 に答える
23

このスタックオーバーフローの質問で提供されたこの回答、この質問に対するより良い回答だと思います。

引用の詳細(上記のリンクされた回答から@lamhoangtungから借用)

import base64
import json
import cv2
import numpy as np

response = json.loads(open('./0.json', 'r').read())
string = response['img']
jpg_original = base64.b64decode(string)
jpg_as_np = np.frombuffer(jpg_original, dtype=np.uint8)
img = cv2.imdecode(jpg_as_np, flags=1)
cv2.imwrite('./0.jpg', img)
于 2019-11-20T15:52:10.207 に答える