2012-09-14 51 views
0

我想使用opencv從圖像創建視頻。

奇怪的問題是,如果我會寫圖像(BMP) 到磁盤,然後負載(cv.LoadImage)它它呈現罰款,但 當我嘗試從StringIO的加載圖像並將其轉換 它的IplImage,它將視頻轉換爲藍色。
圖像到視頻 - 轉換爲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 

回答

1

OpenCV中打開默認的圖像與BGR,在PIL事實並非如此。這導致了你的問題。已經給出了一個解決方案,但是我寫了這篇文章,以便您可以瞭解其背後的原因,也許可以爲此案例以及將來可能派生出您自己的解決方案。