Почему автоматическое изменение значения пикселя в Python? - PullRequest
0 голосов
/ 04 октября 2018

Я извлекаю кадры из видео с помощью VideoCapture.Извлеченный первый кадр преобразует кадр в изображение с помощью PIL.Напечатал предыдущее значение пикселя в позиции (1,1). Напечатал значение пикселя в позиции (1,1) вновь созданного изображения. Может кто-нибудь объяснить, почему?

Функция для извлечения кадров

import cv2

from PIL import Image

def FrameCapture(path):

# Path to video file
    vidObj = cv2.VideoCapture(path)
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    width = cv2.CAP_PROP_FRAME_WIDTH
    height = cv2.CAP_PROP_FRAME_HEIGHT
    fps = cv2.CAP_PROP_FPS
    out = cv2.VideoWriter("D:\Funny 3 second video.mp4", fourcc, fps, (width, height))

    cnt = int(0)

    while 1:

        # vidObj object calls read
        # function extract frames

        success, arrayframe = vidObj.read()
        if success == 0:
            break



        if cnt == 0:
            #IF FIRST FRAME SAVE IT

            sp = Image.fromarray(arrayframe)
            sp.save("D:\sp2.jpg")
            fp = "D:\sp2.jpg"
            im = Image.open(fp, mode='r')
            im = im.convert('RGB')
            print("Old Value:  ",arrayframe[1][1])
            print("New Value:  ",im.getpixel((1, 1)))

        out.write(arrayframe)

        cnt += 1

    vidObj.release()
    out.release()
    cv2.destroyAllWindows()

# Driver Code
if __name__ == '__main__':
    # Calling the function

    FrameCapture("D:\Funny 2 second video.mp4")

Выход

Old Value:   [94 95 90]
New Value:   (94, 95, 89)

1 Ответ

0 голосов
/ 04 октября 2018

Ответ очень прост.Вы сохранили данные в формате с потерями, а именно в формате JPEG, и они потеряли данные.

Используйте формат без потерь, например PNG, если для вас важен каждый бит.

...