やりたいこと
・読み込んだ画像(複数を)リサイズ
・その画像一枚ずつに対して標準化なるものを施す ← ここができない
・最終的にテンソル型にして返したい (あわよくば...)
imgsの中には00001.jpg,00002.jpg・・・・とたくさんあります。
それを最終的には
標準化したデータを返り値としてほしい感じです。
→0~1の小さい値のはず!!(小数)
あわよくばそのデータをtensor化して返しせるとベストですが...
ぶっちゃけた話ですが、あんまし出力の結果も予想がつかないのでめちゃくちゃなこと言ってると思います。初心者過ぎて自分が何やろうとしているのかはっきりしていないパターンです。地獄です。
環境
wsl1
python 3.7
わかったこと
・scipyのzscoreを使えば標準化はたやすいものらしいということ
・numpy配列に対してzscoreが成り立つらしい
わからないこと
・opencvの画像データからshapeでh,w,cを取得することができるのはわかりました。
・これがndarry型と呼ばれているのもわかりました。
・だったらzscore(img)で計算できるのではないか?という疑問があります。
・だったらlistに入れればいいのではと思いましたがそれも違いました...
盛大な勘違いと無知があるのでお許しください。。。
書いたコード
この中には中途半端にコメントとコードを記載しているので不明点があればご指摘ください
コメントにあるコードは大体検証に使ってそのまま残しているものです。
i==0で止めているのは、複数あるデータの一枚目で止めているためです。
またchwのところはテンソル型にするのに便利だと聞いたからです。
python
1import os 2import glob 3import cv2 4import numpy as np 5from scipy.stats import zscore 6 7# 前処理 8 9imgs = glob.glob('./data/cat/*.jpg') 10 11# 呼び出したときtensor型Dataloaderに渡すためにしなきゃいけない 12# リサイズして画像の標準化をしたものを求める(tensor型で返す) 13def trans_square(imgs): 14 15 # array_list = [] 16 17 for i,img_list in enumerate(imgs): 18 img = cv2.imread(img_list) 19 img = cv2.resize(img,(256,256)) 20 21 22 23 # array_list.append(img) 24 # for array_i in array_list: 25 # img = zscore(array_i) 26 # print(array_i) 27 28 29 30 # 標準化(numpy配列を変換してくれるらしい...) 31 # これはnumpy配列か? 32 img = zscore(img) 33 34 35 # chwに変換 36 img = np.transpose(img,(2,0,1)) 37 # print(img) 38 c,h,w = img.shape 39 print("{},{},{}".format(c,h,w)) 40 41 42 43 44 # for j in nomlization: 45 # print(j) 46 if i ==0: 47 break 48 49 50 51 return img 52 53 54 55trans_square(imgs)
まとめ
複数ある画像データから画像をリサイズしました。これを標準化して
返り値を取得したいです。勝手な予想なのですがh,w,cの三つのように標準化した値もみっつあるのではないでしょうか。
となると、例えば0.1, 1, 0のような三つの値が出てくることが予想されます。
これらの値を取得してほしいです。
これはあわよくばですが,おそらくnumpy配列型になった標準化された画像データたちをテンソル化できる方がいれば最高です。
本当に初心者過ぎて申し訳ないですが、お力を貸していただければと思います....
回答1件
あなたの回答
tips
プレビュー