web-dev-qa-db-ja.com

Opencv 2.4でpython numpy配列をRGB画像に変換する方法は?

同様の質問を検索しましたが、ほとんどのソリューションは古いバージョンのOpenCVを使用しているため、有用なものは見つかりませんでした。

3D numpy配列があり、OpenCV(cv2)を使用してBGRイメージとして表示および/または保存したいと思います。

短い例として、私が持っていたと仮定します:

import numpy, cv2
b = numpy.zeros([5,5,3])

b[:,:,0] = numpy.ones([5,5])*64
b[:,:,1] = numpy.ones([5,5])*128
b[:,:,2] = numpy.ones([5,5])*192

私がしたいのは、bを次のようなカラー画像として保存して表示することです

cv2.imwrite('color_img.jpg', b)
cv2.imshow('Color image', b)
cv2.waitKey(0)
cv2.destroyAllWindows()

おそらくbのデータ型が正しくないため、これは機能しませんが、十分な検索を行った後、正しいデータ型に変更する方法がわかりません。ポインターを提供できるなら、大歓迎です!

26
jmanring220

OpenCV cv2モジュールはnumpyarrayを受け入れることができるため、Mat配列からnumpyに変換する必要はありません。注意する必要があるのは、{0,1}が{0,255}にマップされ、numpy配列の1より大きい値が255に等しいことです。したがって、コードでは255で除算する必要があります。下に示された。

img = numpy.zeros([5,5,3])

img[:,:,0] = numpy.ones([5,5])*64/255.0
img[:,:,1] = numpy.ones([5,5])*128/255.0
img[:,:,2] = numpy.ones([5,5])*192/255.0

cv2.imwrite('color_img.jpg', img)
cv2.imshow("image", img);
cv2.waitKey();
14
bikz05

あなたが探している scipy.misc.toimage

import scipy.misc
rgb = scipy.misc.toimage(np_array)

scipy 1. にもあるようですが、非推奨の警告があります。代わりに、pillowおよび PIL.Image.fromarray を使用できます

9
Martin Thoma

次の画像c、d、eおよびfは、色空間変換を示しています。これらはたまたまnumpy配列<type 'numpy.ndarray'>でもあります。

import numpy, cv2
def show_pic(p):
        ''' use esc to see the results'''
        print(type(p))
        cv2.imshow('Color image', p)
        while True:
            k = cv2.waitKey(0) & 0xFF
            if k == 27: break 
        return
        cv2.destroyAllWindows()

b = numpy.zeros([200,200,3])

b[:,:,0] = numpy.ones([200,200])*255
b[:,:,1] = numpy.ones([200,200])*255
b[:,:,2] = numpy.ones([200,200])*0
cv2.imwrite('color_img.jpg', b)


c = cv2.imread('color_img.jpg', 1)
c = cv2.cvtColor(c, cv2.COLOR_BGR2RGB)

d = cv2.imread('color_img.jpg', 1)
d = cv2.cvtColor(c, cv2.COLOR_RGB2BGR)

e = cv2.imread('color_img.jpg', -1)
e = cv2.cvtColor(c, cv2.COLOR_BGR2RGB)

f = cv2.imread('color_img.jpg', -1)
f = cv2.cvtColor(c, cv2.COLOR_RGB2BGR)


pictures = [d, c, f, e]

for p in pictures:
        show_pic(p)
# show the matrix
print(c)
print(c.shape)

詳細については、こちらをご覧ください。 http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html#cvtcolor

または次のことができます:

img = numpy.zeros([200,200,3])

img[:,:,0] = numpy.ones([200,200])*255
img[:,:,1] = numpy.ones([200,200])*255
img[:,:,2] = numpy.ones([200,200])*0

r,g,b = cv2.split(img)
img_bgr = cv2.merge([b,g,r])
4
jmunsch

誰かが単に背景として黒の画像を表示したいだけなら、ここに例があります。 500x500 pxの場合:

import cv2
import numpy as np

black_screen  = np.zeros([500,500,3])
cv2.imshow("Simple_black", black_screen)
cv2.waitKey(0)
3
AlexeyGy