0

I am working on this challenge called Carvana Segmentation in kaggle. The dataset consists of 5088 images, for each image there is a mask. For eg, the below is a single image (.jpg file) and its corresponding mask (.gif file).

enter image description here enter image description here

I was able to read .jpg files using cv2, but not the .gif files. The syntax i used to read .gif file is

 >>> image = cv2.imread('filename.gif',cv2.IMREAD_GRAYSCALE) 

When I try to print the image, returns None

 >>> print(image) -> None 

Can someone suggest any other method, please

3 Answers 3

1

imageio allows to read gifs like this:

import imageio img = imageio.imread('filename.gif') 
Sign up to request clarification or add additional context in comments.

Comments

1

Following this repo: https://github.com/asharma327/Read_Gif_OpenCV_Python/blob/master/gif_to_pic.py

you can do the following to read the image

import cv2 import os def convert_gif_to_frames(gif): # Initialize the frame number and create empty frame list frame_num = 0 frame_list = [] # Loop until there are frames left while True: try: # Try to read a frame. Okay is a BOOL if there are frames or not okay, frame = gif.read() # Append to empty frame list frame_list.append(frame) # Break if there are no other frames to read if not okay: break # Increment value of the frame number by 1 frame_num += 1 except KeyboardInterrupt: # press ^C to quit break return frame_list def output_frames_as_pics(frame_list): # Reduce the list of frames by half to make the list more managable frame_list_reduce = frame_list[0::2] # Get the path of the current working directory path = os.getcwd() # Set then name of your folder '''Replace this name with what you want your folder name to be''' folder_name = 'Picturebook_Pics_Kiss' # If the folder does not exist, then make it if not os.path.exists(path + '/' + folder_name): os.makedirs(path + '/' + folder_name) for frames_idx in range(len(frame_list_reduce)): cv2.imwrite(os.path.join(path + '/' + folder_name, str(frames_idx+1) + '.png'), frame_list_reduce[frames_idx]) return gif = cv2.VideoCapture('/home/ahmedramzy/Documents/gif/giphy.gif') # here you can get the frames and work on it xx = convert_gif_to_frames(gif_kiss) # here if you want to write it on hard disk using imwrite output_frames_as_pics(xx) 

Comments

0

You can't use imread(), there's no codec for that builtin (still a license problem)[https://answers.opencv.org/question/185929/how-to-read-gif-in-python/]

Since you are interested in python, you may use PIL library as mentioned here.

from PIL import Image im = Image.open("animation.gif") # To iterate through the entire gif try: while 1: im.seek(im.tell()+1) # do something to im except EOFError: pass # end of sequence 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.