我试图让opencv VideoWriter从skimage-kit修改的图像中生成avi。我遇到了skimage.io.imsave和VideoWriter.write"之间的色差。
当我看到opencv生成的电影时,它看起来只有蓝色。但是,如果我通过skimage.io.imsave保存帧,则jpg文件具有正确的颜色。 我认为在skimage中发生标准化会对我造成不好的影响,但我不确定如何将它们转换为为opencv收集颜色。
任何人都可以建议为什么差异来自我以及如何解决它? 我真的很感激任何建议。
result of imsave,which I want result of output.avi
import numpy
import cv2
from colorizer import Colorizer #returns modified 224*224 color image using skimage kit
import skimage
c=Colorizer()
cap = cv2.VideoCapture('test.mp4')
fourcc = cv2.cv.CV_FOURCC(*'MJPG')
out = cv2.VideoWriter('output.avi',fourcc, 12.0, (224,224))
i=0
while(cap.isOpened()):
ret, frame = cap.read()
cframe=c.colorize(frame)
#it outputs correct color image
skimage.io.imsave("result/%d.jpg" % i, cframe)
#it outputs wrong color
out.write(skimage.img_as_ubyte(cframe))
i=i+1
cap.release()
out.release()
cv2.destroyAllWindows()
答案 0 :(得分:0)
谢谢ZdaR。根据您的建议,我只需将矩阵RGB转换为BGR,然后就可以了! 更高版本的opencv可能有cvcolor RGB2BGR,但我的环境不支持它,因此我以传统方式实现..
cframe=c.colorize(frame)
img=np.zeros((224,224,3),dtype=np.float32)
img[:,:,0]=cframe[:,:,2]
img[:,:,1]=cframe[:,:,1]
img[:,:,2]=cframe[:,:,0]
out.write((img*225.0).astype('u1'))