pythonでclipした画像データのhashを得る

元々やりたかったこととしてはランダムにclipした画像を重複なく保存すること。そのためファイル名として画像データのhashがほしかった。以下のコードでhashを取得できる。

import cv2
import hashlib

pos_x , pos_y = <clip領域の左上の座標>
width , height = <clip領域の幅と高さ>
path = <clipしたい画像のpath>

image = cv2.imread(path) 
image_clipped = image[y:y+h, x:x+w]
hash_clipped = hashlib.md5(image_clipped.tobytes()).hexdigest()

画像のロードにはopencvを使ったので、imreadでnumpyの配列が取得できる。md5にはbyte arrayであれば渡せるのでtobytesで変換している。

注意点としては、これで得られるhashは画像のピクセルデータの配列に対するものなので、imwriteなどによってpngやjpgなどとして保存した後の画像ファイルのhashとは異なること。 今回はやりたかったことからしてこのやり方で問題なかったが、保存後のファイルのhashがほしい場合はこれではダメなので注意。