opencvはgifに対応してなかった

import cv
img = cv.LoadImage('sample.gif')

こんな感じでcv.LoadImageでgif画像を読み込もうとすると以下のようなエラーが出る

$ python test3.py sample.gif
Traceback (most recent call last):
  File "test3.py", line 2, in <module>
    img = cv.LoadImage('sample.gif')
IOError: [Errno 2] No such file or directory: 'sample.gif'

表題の通りにopencv でgifを使うには

cv2を使う。エラーはでない。

import cv2
img = cv2.imread('sample.gif')

しかし、世の中には古い環境などでimport cvしか使えないつらい時がある。 opencvのマニュアルを見ると、PIL Imageからopencvに変換するにはというのがあって、これを利用してみる

from PIL import Image
import cv
sample = Image.open('sample.gif')
cv_im = cv.CreateImageHeader(sample.size, cv.IPL_DEPTH_8U, 3)
cv.SetData(cv_im, sample.tostring())
print sample.size, cv.GetSize(cv_im)
(868, 600) (868, 600)
>>> print sample.tostring() == cv_im.tostring()
False

gif画像のsizeは取得できたが、同じデータに変換は出来なかった

gifをcvでどうしても取り扱いたかった時どうしたか

gifをjpgに変換することで逃げた ┗(^o^ )┓三

以下のようにPILを使って、sample.gifをjpgに変換してconvertfromgif.jpgとして保存したものを利用するようにした

from PIL import Image
im = Image.open('sample.gif').convert('RGB').save('convertfromgif.jpg')