Как прочитать маску изображения с помощью opencv в Python - PullRequest
0 голосов
/ 30 мая 2019

Я работаю над этим вызовом, который называется «Сегментация карваны» в kaggle.Набор данных состоит из 5088 изображений, для каждого изображения есть маска.Например, ниже приведено одно изображение (файл .jpg) и соответствующая ему маска (файл .gif).

enter image description here enter image description here

Я смог прочитать файлы .jpg.используя cv2, но не файлы .gif.Синтаксис, который я использовал для чтения .gif файла:

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

Когда я пытаюсь напечатать изображение, возвращается Нет

 >>> print(image) -> None

Может кто-нибудь предложить какой-либо другой метод, пожалуйста

Ответы [ 3 ]

1 голос
/ 30 мая 2019

После этого репо: https://github.com/asharma327/Read_Gif_OpenCV_Python/blob/master/gif_to_pic.py

Вы можете сделать следующее, чтобы прочитать изображение

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)
1 голос
/ 30 мая 2019

imageio позволяет читать картинки так:

import imageio

img = imageio.imread('filename.gif')
0 голосов
/ 30 мая 2019

Вы не можете использовать imread (), для этого встроенного кодека нет (все еще проблема с лицензией) [https://answers.opencv.org/question/185929/how-to-read-gif-in-python/]

Поскольку вы заинтересованы в Python, вы можете использовать библиотеку PIL , как указано здесь .

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...