In [1]:
import cv2
import numpy as np

In [2]:
im = cv2.imread('data/src/lena.jpg')
print(im.shape)


(225, 400, 3)

In [3]:
print(im.dtype)


uint8

In [4]:
cv2.imwrite('data/temp/lena.png', im)
im_png = cv2.imread('data/temp/lena.png')

In [5]:
print(np.array_equal(im, im_png))


True

In [6]:
cv2.imwrite('data/temp/lena.bmp', im)
im_bmp = cv2.imread('data/temp/lena.bmp')

In [7]:
print(np.array_equal(im, im_bmp))


True

In [8]:
print(np.array_equal(im_png, im_bmp))


True

In [9]:
cv2.imwrite('data/dst/lena_q25.jpg', im, [cv2.IMWRITE_JPEG_QUALITY, 25])
im_q25 = cv2.imread('data/dst/lena_q25.jpg')

In [10]:
print(np.array_equal(im, im_q25))


False

In [11]:
print(im.shape == im_q25.shape)


True

In [12]:
print(im.shape == (250, 400, 3))


False

In [13]:
im_diff = im.astype(int) - im_q25.astype(int)

In [14]:
print(im_diff.max())


142

In [15]:
print(im_diff.min())


-101

In [16]:
im_diff_abs = np.abs(im_diff)

In [17]:
print(im_diff_abs.max())


142

In [18]:
print(im_diff_abs.min())


0

In [19]:
cv2.imwrite('data/dst/lena_diff_abs.png', im_diff_abs)


Out[19]:
True

In [20]:
im_diff_abs_norm = im_diff_abs / im_diff_abs.max() * 255

In [21]:
print(im_diff_abs_norm.max())


255.0

In [22]:
print(im_diff_abs_norm.min())


0.0

In [23]:
cv2.imwrite('data/dst/lena_diff_abs_norm.png', im_diff_abs_norm)


Out[23]:
True

In [24]:
im_diff_center = np.floor_divide(im_diff, 2) + 128

In [25]:
print(im_diff_center.max())


199

In [26]:
print(im_diff_center.min())


77

In [27]:
cv2.imwrite('data/dst/lena_diff_center.png', im_diff_center)


Out[27]:
True

In [28]:
im_diff_center_norm = im_diff / np.abs(im_diff).max() * 127.5 + 127.5

In [29]:
print(im_diff_center_norm.max())


255.0

In [30]:
print(im_diff_center_norm.min())


36.81338028169013

In [31]:
cv2.imwrite('data/dst/lena_diff_center_norm.png', im_diff_center_norm)


Out[31]:
True

In [32]:
im_diff_bin = (im_diff_abs > 32) * 255

In [33]:
cv2.imwrite('data/dst/lena_diff_bin.png', im_diff_bin)


Out[33]:
True

In [34]:
print(list(zip(*np.where(im_diff_abs == np.max(im_diff_abs)))))


[(155, 117, 2)]

In [35]:
print(list(zip(*np.where(im_diff_abs > 100))))


[(135, 160, 0), (137, 157, 2), (155, 117, 2)]