Значения интенсивности кадров изображения изменяются после преобразования в видео - PullRequest
1 голос
/ 20 марта 2019

Я использую openCV для создания видео с определенными шаблонами.Один из моих шаблонов размером 35x35 выглядит следующим образом

pattern

, а соответствующие числовые записи в базовой матрице выглядят следующим образом

enter image description here

Моя идея - наложить узор на белый фон размером 260x346 и создать видео, в котором узор перемещается горизонтально.Первый кадр будет выглядеть примерно так:

enter image description here

Я создаю видео с помощью openCV со следующей функцией

def move_square(pattern, background):
    '''
    The function creates a video of the pattern moving horizontally over a given background

    Parameters:
    -----------
    pattern: <np.array, 35x35>
        The pattern supposed to move over the background
    background: <np.array, 260x346>
        A white background of the given size 
    '''
    fourcc = VideoWriter_fourcc(*'MP42')
    video = VideoWriter('./videos/moving_pattern_for_sampling_exp.avi', fourcc, 30, (346, 260))
    background[112:147, 0:35] = pattern
    frame = background

    for _ in range(0, 346-30):
        video.write(cv2.cvtColor(frame,cv2.COLOR_GRAY2RGB))
        shifted_frame =  np.roll(frame, 1, axis=1)
        frame = shifted_frame
        video.write(frame)

    cv2.destroyAllWindows()
    video.release()

Однако еслиЯ прочитал кадры из вышеприведенного видео, используя следующий фрагмент

vidcap = cv2.VideoCapture('videos/moving_pattern_for_sampling_exp.avi')
success,image = vidcap.read()
count = 0

while success:
  cv2.imwrite("test/frame%d.jpg" % count, image)     # save frame as JPEG file      
  success,image = vidcap.read()
  print('Read a new frame: ', success)
  count += 1

im = cv2.imread('test/frame1.jpg')
img = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
np.savetxt("image.csv", np.asarray(img),fmt='%i', delimiter=",")

, и теперь просматриваю кадры, значения шаблона в кадре отличаются от того, чем они были изначально.

enter image description here

Также местоположения, которые должны были быть белыми со значением 255, теперь были установлены на 252 повсюду.В чем может быть причина этих расхождений?

1 Ответ

2 голосов
/ 20 марта 2019

При сохранении изображения в формате JPEG вы теряете качество, а значит, и точность.Вот пример сжатия JPEG (вы можете найти полное изображение здесь ):

No compression Compression

Вы можете наблюдать ухудшение качества для птицы и дерева (на полном изображении).

Как предложил @Mark Setchell, вы можете использовать PNG, чтобы избежать этого, но помните, что чем больше у вас цветавариаций вашего изображения, тем больше будет ваш файл.

Если это поможет, эта статья в Википедии кратко описывает общие форматы файлов.

...