为什么 python 中的像素值会自动变化?

Why the automatic change in pixel value in python?

我正在借助 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)

答案很简单。您以有损格式(即 JPEG)保存数据,并且丢失了数据。

如果每一位都对您很重要,请使用 PNG 等无损格式。