最近、Convolutional Neural Networksに関する論文を書いていましたが、整理が必要な実験結果がたくさんあります。もともと画像のステッチにMeitu Xiuxiuを使用していましたが、繰り返し操作が多すぎてステッチ効果が良くないことがわかりました。pythonでスクリプトを書くことを考えました。達成するには、簡単な例を見てください。
横縫い
まず、同じ画像の変形を1行につなぎ合わせる必要があります。コードは、次のとおりです。
import os
from PIL import Image
UNIT_SIZE =229 #1枚の画像のサイズは229です*229
TARGET_WIDTH =6* UNIT_SIZE #接合後の水平方向の長さは6です。*229
path ="C:/Users/zm/Desktop/FinalResult/Other-Reconstruction/2"
images =[] #最初にすべての画像の名前を保存します
for root, dirs, files in os.walk(path):for f in files :
images.append(f)for i inrange(len(images)/6): #グループとして6枚の画像
imagefile =[]
j =0for j inrange(6):
imagefile.append(Image.open(path+'/'+images[i*6+j]))
target = Image.new('RGB',(TARGET_WIDTH, UNIT_SIZE))
left =0
right = UNIT_SIZE
for image in imagefile:
target.paste(image,(left,0, right, UNIT_SIZE))#ターゲットの指定された場所に画像をコピーします
left += UNIT_SIZE #左は左上隅の横軸で、順番に増加します
right += UNIT_SIZE #右は右下の横軸で、順番に増加します
quality_value =100 #生成された画像の品質を指定するための品質。範囲は0〜100です。
target.save(path+'/result/'+os.path.splitext(images[i*6+j])[0]+'.jpg', quality = quality_value)
imagefile =[]
縦縫い
それぞれの種類の写真を6枚の列につなぎ合わせた後、これらの写真を縦につなぎ合わせます。合計3種類の画像があるため、3列になります。
import os
from PIL import Image
UNIT_SIZE =229 #画像の高さ
TARGET_WIDTH =6* UNIT_SIZE #連続して6つの画像があるので、6*229とても広い
path ="C:/Users/zm/Desktop/FinalResult/Other-Reconstruction/2/result"
imagefile =[]for root, dirs, files in os.walk(path):for f in files :
imagefile.append(Image.open(path+'/'+f))
target = Image.new('RGB',(TARGET_WIDTH, UNIT_SIZE*3)) #最終的なステッチ画像のサイズは(229*3)*(229*6)
left =0
right = UNIT_SIZE
for image in imagefile:
target.paste(image,(0, left, TARGET_WIDTH, right))
left += UNIT_SIZE #上から下にステッチすると、左上隅の縦方向が増加します
right += UNIT_SIZE #左下隅の縦も増加します
quality_value =100
target.save(path+'/result.jpg', quality = quality_value)
水平方向と垂直方向の同時ステッチ
今日処理する必要のある写真は次のとおりです:左側は写真が配置されているフォルダーであり、各フォルダーの写真は→_→右側として表示され、2 * 5の写真にスプライスする必要があります。
記述されたスクリプトは次のとおりです。
import os
from PIL import Image
UNIT_SIZE =229 # the size of image
def pinjie(images,num):
target = Image.new('RGB',(UNIT_SIZE*5, UNIT_SIZE*2)) # result is 2*5
leftone =0
lefttwo =0
rightone = UNIT_SIZE
righttwo = UNIT_SIZE
for i inrange(len(images)):if(i%2==0):
target.paste(images[i],(leftone,0, rightone, UNIT_SIZE))
leftone += UNIT_SIZE #最初の行の左上隅を右に移動します
rightone += UNIT_SIZE #右下隅に移動
else:
target.paste(images[i],(lefttwo, UNIT_SIZE, righttwo, UNIT_SIZE*2))
lefttwo += UNIT_SIZE #2行目の左上隅を右に移動します
righttwo += UNIT_SIZE #右下隅に移動
quality_value =100
target.save(path+dirlist[num]+'.jpg', quality = quality_value)
path ="C:/Users/laojbdao/Desktop/FinalResult/result4/different_distribution/"
dirlist =[] # all dir name
for root, dirs, files in os.walk(path):for dir in dirs :
dirlist.append(dir)
num =0for dir in dirlist:
images =[] # images in each folder
for root, dirs, files in os.walk(path+dir): # traverse each folder
print path+dir+''for file in files:
images.append(Image.open(path+dir+'/'+file))pinjie(images,num)
num +=1
images =[]
この記事はトピック「python画像処理操作」に含まれています。クリックして、よりエキサイティングなコンテンツを学ぶことを歓迎します。
以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。
Recommended Posts