サムネイルはすべて同じサイズのリストになっていて、それらを所定の幅のモザイクとして表示したいと思います。考え方は、形状が(thumb_height, thumb_width*width, 3)
の行ごとに1つのイメージを作成してから、1つのイメージを取得してそれらをすべて連結することです。今、幅がサムネイルの数の約数でない場合、最後の行はいくつかの画像を欠場するでしょう。アイデアは、黒のプレースホルダでギャップを埋めることです。ここでは、コードです:OpenCV 3とnumpyでサムネイルのモザイクを作成する
def show_images_mosaic(images, width):
rows = []
for i in range(0, len(images), width):
rows.append(np.concatenate(images[i: i + width], axis=1))
if len(rows) > 1:
last_row = rows[-1]
height = images[0].shape[0]
last_row_width = last_row.shape[1]
expected_width = rows[0].shape[1]
if last_row_width < expected_width:
filler = np.zeros((height, expected_width - last_row_width, 3))
rows[-1] = np.concatenate((last_row, filler), axis=1)
else:
filler = None
mosaic = np.concatenate(rows, axis=0)
cv2.imshow('Mosaic', mosaic)
for i, row in enumerate(rows):
cv2.imshow('Row' + str(i), row)
cv2.imshow('LastRowUnfilled', last_row)
if filler is not None:
cv2.imshow('Filler', filler)
cv2.waitKey(0)
width
は、サムネイルの数の約数であればこのコードは素晴らしい作品。しかし、私は最後の行を埋める必要があるとき何らかの理由でそれは壊れます。奇妙なことは、最後の行だけが壊れないということですが、イメージ全体が壊れてしまい、なぜそれが理解できないのでしょうか。さらに、最後の行を除く単一の行が正しく表示されますが、最後の行がイメージ全体に影響するかのように、モザイク全体が壊れます。
壊れたモザイクの例を表示できますか? – Sunreef