質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

5164閲覧

データの水増しについて(mnist文字データをpngファイルで保存→Augmentationで画像を変える→mnist文字データに変形)

akihir

総合スコア39

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/01/14 06:33

編集2019/01/14 10:16

データの水増しについて検討しています。
そこで、mnistデータのような手書き文字データを使って画像を拡大するコードに挑戦しました。

現在、行っていることは

1.matplotlibでデータをpngファイルで保存

2. Augmentationで画像を変形

3.その画像をもう一度,mnistと同じデータ形式に変形する

です。
そこで問題点と・質問として、
・ (1.)の項目で画像表示・保存するときに画像の端に境界線として黒い線が表示・保存されます。
もともとの画像
イメージ説明
データを変えた画像
イメージ説明
このような周りの黒い線を消したいです。

・ (3.)の項目で保存した文字画像をmnistデータのように784ピクセルの画像データに変形できない

があります。
宜しくお願いします。

以下がコードとなります。

python

1import Augmentor 2from PIL import Image 3import shutil 4import os 5 6# data : トレーニングデータ label : ラベルデータ 7 8# カタカナの「セ」のデータ 9img_0 = data[20] 10 11# matplotlibのデフォルト設定では、目盛り線などが表示される。余分な線などを削除する。 12plt.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False) 13plt.tick_params(color='white') 14 15# img_0 を画像として表示 16plt.imshow(img_0[0,:,:],cmap="gray") 17 18# あるフォルダに保存 19plt.savefig('フォルダの場所') 20 21# Augmentorを用いて画像データを変える 22p = Augmentor.Pipeline("フォルダの場所") 23p.rotate(probability=0.7, max_left_rotation=10, max_right_rotation=10) 24p.zoom(probability=0.5, min_factor=1.1, max_factor=1.5) 25p.sample(1) 26 27 28# 新たな画像データを取得する 29img_ = Image.open("フォルダの場所") 30print(img_) 31 32# 新たな画像データの形式を確認 33img_ = np.array(img_) 34img_.shape 35# (288,432,4)←もともとは(1,28,28) この形に直したいが、、、、

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2019/01/14 08:13 編集

第三者が検証できるよう、提示されている処理のソースコードを提示ください。
Q71

2019/01/14 09:15

カタカナの「セ」ですか?それを構成するドットの太さと、「周りの黒い線」の太さが明らかに異なっています。「周りの太い線」がデータの一部であることを、どのようにして確認しましたか。 「mnistデータのように784ピクセルの画像データに変形できない」とのことですが、MNISTデータのフォーマットを、どのように理解されていますか。それに対して、どのようなデータを、どのようにしてMNISTデータに「変換しようと」されましたか。
akihir

2019/01/14 10:18

ソースコードを提示しました。 また、画像を回転させると、「周りの黒い線」も回転してしまいます。 これより「周りの黒い線」もデータの一部になってしまっていると考えました。
tiitoi

2019/01/14 10:20 編集

matplotlib はグラフ表示ライブラリなので、今回の目的で plt.savefig() で画像を保存するというのは間違っています。 OpenCV の imwrite() を使えば、画像データのまま保存されます。
akihir

2019/01/14 11:02

今回用いた手書き文字データは、画像がなく、0~255までのデータ配列のものとなっています。そのような場合、OpenCVは使用できるのでしょうか。
tiitoi

2019/01/14 11:16

できますよ。PIL でもいいです。 回答に書きました。
guest

回答1

0

ベストアンサー

今回用いた手書き文字データは、画像がなく、0~255までのデータ配列のものとなっています。そのような場合、OpenCVは使用できるのでしょうか。

画像はデータ上は配列なので、配列も画像といえます。

OpenCV または PIL を使うと、以下のように配列を画像ファイルとして保存できます。
OpenCV は画像のチャンネル順は BGR なので、配列のチャンネル順が RGB の場合は img[..., ::-1] でチャンネル順を反転させてから保存します。

python

1import numpy as np 2import cv2 3from PIL import Image 4 5color = (255, 0, 0) # RGB (赤) 6img = np.full((300, 300, 3), color, dtype=np.uint8) 7 8cv2.imwrite('sample.png', img[..., ::-1]) 9 10Image.fromarray(img).save('sample.png')

投稿2019/01/14 11:11

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問