ちょいめも

物理/Python/Cの雑記帳

画像をシフトして出力と、複数画像を平均して出力(python)

画像を縦横任意のpx数シフトして出力

img_shift.py

# -*- coding: utf-8 -*-
#画像をシフトして保存する
#第一引数:画像ファイルパス
#第二引数:縦シフトpx (rows)
#第三引数:横シフトpx (cols)

import cv2
import numpy as np
import sys
import os

argvs = sys.argv #引数取得
argc = len(argvs) #引数の個数

if argc != 4:
	print('img_shiftについて\n')
	print('引数1 : 画像ファイルパス\n引数2 : 縦シフトpx (rows)\n引数3 : 横シフトpx (cols)\n')
	input('終了します。何かキーをおしてください。。。\n')
	sys.exit()

img = cv2.imread(argvs[1]) #画像読み込み
rows, cols, channels = img.shape

M = np.float32([[1,0,argvs[3]],[0,1,argvs[2]]]) #変換
dst = cv2.warpAffine(img,M,(cols,rows)) #cols,rowsは出力画像サイズ

filename, ext = os.path.splitext(os.path.basename(argvs[1]))
cv2.imwrite(filename + '_shift_row' + argvs[2] + 'col' + argvs[3] + ext, dst) #変換画像保存

出力結果
f:id:choimemo:20180311164701j:plain
↓ img_shift.py test1.jpg 10 20
f:id:choimemo:20180311164705j:plain

フォルダ内に含まれるJPG画像を平均して出力

img_ave.py

# -*- coding: utf-8 -*-
#フォルダ内のjpg画像を平均して別名で保存
#第一引数:画像フォルダパス(jpg画像のみ抽出して平均)

import cv2
import numpy as np
import glob
import sys

argvs = sys.argv #引数取得
argc = len(argvs) #引数の個数

if argc != 2:
	print('img_aveについて\n')
	print('引数1 : 画像ファイルが入ったフォルダのパス\n')
	input('終了します。何かキーをおしてください。。。\n')
	sys.exit()

jpg_list = glob.glob(argvs[1] + '/*.jpg') #フォルダ内ファイル取得

if len(jpg_list) != 0:
	img0 = cv2.imread(jpg_list[0]) #画像読み込み サイズチェック
	rows, cols, channels = img0.shape
	img_ave = np.zeros((rows, cols, channels)) #平均値入れる箱を初期化

	for i in jpg_list:
		img_tmp = cv2.imread(i).astype(int)
		if img_tmp.shape != img0.shape:
			print(i + ' : 画像ファイルサイズが異なります。\n全て同じサイズにしてください。\n')
			input('終了します。何かキーをおしてください。。。\n')
			sys.exit()
		else:
			img_ave = img_ave + img_tmp

	img_ave = img_ave / len(jpg_list)
	cv2.imwrite('img_ave.jpg', img_ave) #平均画像保存
													
else:
	print('エラー:JPGファイルのみの対応です。。。')
	input('終了します。何かキーをおしてください。。。\n')
	sys.exit()

出力結果
f:id:choimemo:20180311164701j:plainf:id:choimemo:20180311164753j:plainf:id:choimemo:20180311164808j:plainf:id:choimemo:20180311164810j:plainf:id:choimemo:20180311164812j:plain

f:id:choimemo:20180311164815j:plain