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

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

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

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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

Q&A

解決済

3回答

1066閲覧

cv2で変換した画像が0バイトになる

退会済みユーザー

退会済みユーザー

総合スコア0

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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

0グッド

0クリップ

投稿2019/03/09 01:21

openCVを使って、画像を一括でグレイスケールに変換したのですが、変換した画像のサイズが0バイトとなってしまいます。

ファイル構造は下記の通りです。
├── Machine_learning
│   ├── Gray_date
│   │   ├── Gray_scale.ipynb
│   │   ├── tomato_gray0.jpg
│   │   ├── tomato_gray1.jpg
│   │   ├── tomato_gray10.jpg
│   │   ├── tomato_gray11.jpg
│   │   ├── tomato_gray12.jpg
│   │   ├── tomato_gray13.jpg
│   │   ├── tomato_gray14.jpg
│   │   ├── tomato_gray15.jpg
│   │   ├── tomato_gray16.jpg
│   │   ├── tomato_gray17.jpg
│   │   ├── tomato_gray18.jpg
│   │   ├── tomato_gray19.jpg
│   │   ├── tomato_gray2.jpg
│   │   ├── tomato_gray20.jpg
│   │   ├── tomato_gray21.jpg
│   │   ├── tomato_gray22.jpg
│   │   ├── tomato_gray23.jpg
│   │   ├── tomato_gray24.jpg
│   │   ├── tomato_gray25.jpg
│   │   ├── tomato_gray26.jpg
│   │   ├── tomato_gray27.jpg
│   │   ├── tomato_gray28.jpg
│   │   ├── tomato_gray29.jpg
│   │   ├── tomato_gray3.jpg
│   │   ├── tomato_gray30.jpg
│   │   ├── tomato_gray31.jpg
│   │   ├── tomato_gray32.jpg
│   │   ├── tomato_gray33.jpg
│   │   ├── tomato_gray34.jpg
│   │   ├── tomato_gray35.jpg
│   │   ├── tomato_gray36.jpg
│   │   ├── tomato_gray37.jpg
│   │   ├── tomato_gray38.jpg
│   │   ├── tomato_gray39.jpg
│   │   ├── tomato_gray4.jpg
│   │   ├── tomato_gray5.jpg
│   │   ├── tomato_gray6.jpg
│   │   ├── tomato_gray7.jpg
│   │   ├── tomato_gray8.jpg
│   │   └── tomato_gray9.jpg
│   ├── date
│   │   ├── tomato1.jpg
│   │   ├── tomato10.jpg
│   │   ├── tomato11.jpg
│   │   ├── tomato12.jpg
│   │   ├── tomato13.jpg
│   │   ├── tomato14.jpg
│   │   ├── tomato15.jpg
│   │   ├── tomato16.jpg
│   │   ├── tomato17.jpg
│   │   ├── tomato18.jpg
│   │   ├── tomato19.jpg
│   │   ├── tomato2.jpg
│   │   ├── tomato20.jpg
│   │   ├── tomato21.jpg
│   │   ├── tomato22.jpg
│   │   ├── tomato23.jpg
│   │   ├── tomato24.jpg
│   │   ├── tomato25.jpg
│   │   ├── tomato26.jpg
│   │   ├── tomato27.jpg
│   │   ├── tomato29.jpg
│   │   ├── tomato3.jpg
│   │   ├── tomato30.jpg
│   │   ├── tomato31.jpg
│   │   ├── tomato32.jpg
│   │   ├── tomato33.jpg
│   │   ├── tomato34.jpg
│   │   ├── tomato35.jpg
│   │   ├── tomato36.jpg
│   │   ├── tomato38.jpg
│   │   ├── tomato39.jpg
│   │   ├── tomato4.jpg
│   │   ├── tomato40.jpg
│   │   ├── tomato5.jpg
│   │   ├── tomato6.jpg
│   │   ├── tomato7.jpg
│   │   ├── tomato8.jpg
│   │   └── tomato9.jpg
│   └── tomato.csv

また、Gray_scale.ipynbのコードで変換しており、そのコードは、

python

1import cv2 2for i in range(40): 3 img = cv2.imread("tomato"+str((i))+".jpg", cv2.IMREAD_GRAYSCALE) 4 cv2.imwrite("tomato_gray"+str((i))+".jpg", img)

です。よろしくお願いします。

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

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

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

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

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

tiitoi

2019/03/09 02:25

画像はちゃんと読み込めてますか? imgがNONEじゃないことを確認してください
退会済みユーザー

退会済みユーザー

2019/03/09 02:54

print(img) を追加したところ、 None None None...... 本当にありがとうございます。原因として何が考えられるでしょうか?
退会済みユーザー

退会済みユーザー

2019/03/09 03:06

ファイルのパスは正しいと思うのですが...
tachikoma

2019/03/09 03:52

ノートブックはどのディレクトリ階層においてますか?
tiitoi

2019/03/09 04:07

> 原因として何が考えられるでしょうか? ファイルパスが間違っている。相対パスで指定しているなら、起点となっているディレクトリを勘違いされているのでは?
iwanote

2019/03/09 10:50

読み込んだファイルを一度表示して正常に読み込めているか確認してみては?
退会済みユーザー

退会済みユーザー

2019/03/09 10:55

起点のディレクトリを確認したところ、 cwd= /Users/(名前)/Desktop/python/Machine_learning/Gray_date でした。ファイルパスの不備が原因でした。ありがとうございました。
guest

回答3

0

ベストアンサー

「ファイルのパスが正しくない」のが原因であろうと推測します。

相対パスを指定するなら規定のディレクトリがどこかを把握していなければなりません。それはファイルパスを扱う際の一般原則といえると思います。ファイルを開いたりロードしたりといった関数群の場合、大抵はcurrent working directory(=現在の作業ディレクトリー。以下CWDと略記)が規定ディレクトリーとなるのでまずCWDがどこなのかを知る必要があります。

Notebookからipynbファイルを選択してセッションを開始する際はipynbファイルが存在するディレクトリーがCWDになっていたりすると思いますが、いずれにせよCWDを確認するにはGray_scale.ipynbに

python

1import os 2print('cwd=', os.getcwd()) # CWDを求めそれを印字

と書いておけば例えば

cwd= /Users/abap/Machine_learning/Gray_date

などのような完全パスが確認できます。

(2) パスを正しく指定

もし(1)に書いたとおりになっているなら元の画像の相対パスは"tomato0.jpg"とはなりません。

text

1Machine_learning 2 +-- Gray_date (<- CWD) 3 +-- date 4 +-- tomato0.jpg

なのですから「CWDの一つ親のディレクトリーの下のdateディレクトリーの下」にあるわけで

"../date/tomato0.jpg"

などとすべきでしょう。OpenCVのimreadはエラーレポートしてくれないそっけない関数ですのであらかじめ考えられる間違いの可能性を排除しておく方が無難と思います。事前に

python

1import os 2 3print('existence check:', os.path.exists('../date/tomato0.jpg'))

とやってみて

existence check: True

となるのを確かめておくのがよいと思います。


余談:

  1. dateは「日付」を意味する単語です。dataなら「データ」を意味します。後者のつもりならディレクトリー名をGray_datadataにしておきましょう。

投稿2019/03/09 04:34

KSwordOfHaste

総合スコア18394

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

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

退会済みユーザー

退会済みユーザー

2019/03/09 10:54 編集

ありがとうございます....ご指摘のように起点のディレクトリを確認したところ、 cwd= /Users/(名前)/Desktop/python/Machine_learning/Gray_date と出力があっため、ご指摘の通りにソースコードを改良した結果、無事にグレイスケールに変換することができました。ありがとうございました。
guest

0

python

1import cv2 2import os 3print('cwd=', os.getcwd()) 4for i in range(40): 5 img = cv2.imread("../date/"+"tomato"+str((i))+".jpg", cv2.IMREAD_GRAYSCALE) 6 cv2.imwrite("../Gray_date/"+"tomato" +str((i))+ ".jpg",img) 7########出力 => cwd= /Users/(名前)/Desktop/python/Machine_learning/Gray_date

起点のディレクトリを確認し、ファイルのパスを変更しました。

投稿2019/03/09 10:58

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

よくある事なのですが、ファイルのPATHが省略されているので”読み込むべき”ファイルが読めていません。

img = cv2.imread("tomato"+str((i))+".jpg", cv2.IMREAD_GRAYSCALE) cv2.imwrite("tomato_gray"+str((i))+".jpg", img)

の'"'の前に"Machine_learning\Gray_date"+を追記してみてください。

img = cv2.imread("\Machine_learning\Gray_date\"+"tomato"+str((i))+".jpg", cv2.IMREAD_GRAYSCALE) cv2.imwrite("\Machine_learning\Gray_date\"+"tomato_gray"+str((i))+".jpg", img)

みたいに。

投稿2019/03/09 01:29

MasahikoHirata

総合スコア3747

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

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

退会済みユーザー

退会済みユーザー

2019/03/09 01:46

コードを、```python import cv2 for i in range(40): img = cv2.imread("Machine_learning/date/"+"tomato"+str((i))+".jpg", cv2.IMREAD_GRAYSCALE) cv2.imwrite("Machine_learning/Gray_date/"+"tomato" +str((i))+ ".jpg",img) ``` のように変更しましたが、今度は画像の生成すらされませんでした。エラーコードなどは出ていません。
MasahikoHirata

2019/03/09 01:51

"Machine_learning の部分を "c:\Machine_learning に変えてみてください。
MasahikoHirata

2019/03/09 01:52

それと"/"ではなくて"\"(バックスラッシュ)です。
退会済みユーザー

退会済みユーザー

2019/03/09 01:58

Mac OS mojaveなのですが、c: でいいのでしょうか? 試したところ、 Machine_learning\Gray_date\tomato0.jpg といった、ファイルのパスがそのまま名前になってしまったファイルが大量に生成されてしまい、やはり0バイトです。
MasahikoHirata

2019/03/09 02:02

macならば"c:"は外してください。
退会済みユーザー

退会済みユーザー

2019/03/09 02:54

print(img) を追加したところ、 出力は全てNoneでした。 原因として何が考えられるでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問