Неожиданная модификация изображения при использовании cv2.imread для загрузки изображения

Я пытаюсь внести некоторые изменения в изображение ('some_image.jpeg'). По этой причине я загружаю его в переменные: image_org и image_mod. В image_mod я хочу внести изменения, image_org я хочу оставить без изменений для последующих сравнений. После внесения некоторых изменений в image_mod (в основном рисования на нем линий). Я создаю новое изображение, которое является разницей между измененным и исходным: image_diff = cv2.subtract (image_mod, image_org). Я вычисляю разницу в одно число с помощью: diff_num = cv2.sumElems (image_diff) [0] и сохраняю все 3 изображения в файлы .png. Я пытаюсь получить: - изображение, идентичное исходному файлу (image_org) - изображение, на котором есть дополнительные строки (image_mod) - изображение только со строками, которые были добавлены в image_mod (image_diff) - diff_num должно быть числом, а большое число Однако я получаю: - image_org изменен и выглядит точно так же, как image_mod - diff_num равен 0.0

Я подозреваю, что делаю ошибку в первых нескольких строках кода, однако я не могу понять, как image_org изменяется с моим кодом. Пожалуйста, помогите, как это исправить, чтобы я получил то, что ожидал.

import cv2

image_org = cv2.imread('some_image.jpeg',0)
image_mod = image_org

for i in range(10):
    cv2.line(image_mod,(100+i*5,0),(0+i*5,150),(255),1,16)

image_diff = cv2.subtract(image_mod, image_org)
diff_num = cv2.sumElems(image_diff)[0]

cv2.imwrite('test_org.png',image_org)
cv2.imwrite('test_mod.png',image_mod)
cv2.imwrite('test_dif.png',image_diff)

print(diff_num)

person KorwinNaSloniu    schedule 18.02.2018    source источник


Ответы (1)


image_org и image_mod - это просто два имени для одного и того же объекта.

Вам необходимо сделать копию исходного изображения:

image_mod = image_org.copy()

image_mod тогда будет другим объектом.

person Thierry Lathuille    schedule 18.02.2018