为什么skimage.io.imsave和opencv.VideoWriter之间的颜色不同

时间:2016-02-25 08:52:50

标签: python opencv scikit-image

我试图让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()

1 个答案:

答案 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'))