0

opencvを使用して画像からビデオを作成したい。

奇妙な問題は、画像(bmp)をディスクに書き込んでからロード(cv.LoadImage)すると正常にレンダリングされることですが、StringIOから画像をロードしてIplImageに変換しようとすると、ビデオが青色に変わります。

コードは次のとおりです。

import StringIO
output = StringIO.StringIO()
FOREGROUND = (0, 0, 0)
TEXT = 'MY TEXT'
font_path = 'arial.ttf'
font = ImageFont.truetype(font_path, 18, encoding='unic')
text = TEXT.decode('utf-8')
(width, height) = font.getsize(text)
# Create with background with place for text
w,h=(600,600)
contentimage=Image.open('0.jpg')
background=Image.open('background.bmp')

x, y = contentimage.size

# put content onto background
background.paste(contentimage,(((w-x)/2),0))
draw = ImageDraw.Draw(background)
draw.text((0,0), text, font=font, fill=FOREGROUND)

pi = background
pi.save(output, "bmp")
#pi.show()   #shows image in full color
output.seek(0)
pi= Image.open(output)
print pi, pi.format, "%dx%d" % pi.size, pi.mode
cv_im = cv.CreateImageHeader(pi.size, cv.IPL_DEPTH_8U, 3)
cv.SetData(cv_im, pi.tostring())
print pi.size, cv.GetSize(cv_im)
w = cv.CreateVideoWriter("2.avi", cv.CV_FOURCC('M','J','P','G'), 1,(cv.GetSize(cv_im)[0],cv.GetSize(cv_im)[1]), is_color=1)
for i in range(1,5):
    cv.WriteFrame(w, cv_im)
del w
4

2 に答える 2

1

BGROpenCVは、デフォルトの画像をPILで開きますが、そうではありません。それはあなたの問題を引き起こしました。解決策はすでに与えられていますが、私はこの投稿を書いたので、その背後にある理由を学び、この場合、そしておそらく将来の任意の場合について独自の解決策を導き出すことができます。

于 2012-09-15T15:37:17.950 に答える
0

解決策を見つけました http://choco-lue.blogspot.com/2010/04/python-image-library-part-2-opencv.html

import Image, cv
pi = Image.open('building.jpg')       # PIL image
cv_im = cv.CreateImageHeader(pi.size, cv.IPL_DEPTH_8U, 3)
r,g,b=pi.split()
pi2=Image.merge("RGB",(b,g,r))
cv.SetData(cv_im, pi2.tostring())
于 2012-09-15T15:11:58.320 に答える