特定の画像でテンソルフローのグレイスケール変換を使うとエラーが発生する
グーグルドライブから画像を読み込んで加工するプログラムを書いたいたところ、特定の画像でエラーが発生しました。ほかの画像だと問題なく加工できたのですが、この画像で実行すると下記のエラーが発生してしまいます。どうやら読み込み、テンソル化までは問題なく行っているようです。
使用言語はpythonで、実行環境はgoogle colaboratoryです。
テンソルフローのバージョンは2.0.0です。
どのようにすればこのエラーは解消しますか。
※当方このサイトにあまり慣れていないため、質問方法や記載方法がおかしかったら是非指摘していただけると助かります。
エラーメッセージ
InvalidArgumentError Traceback (most recent call last)
<ipython-input-111-242afefc9006> in <module>()
1 pre_data = tf.image.resize(pre_data,[500,500])
----> 2 pre_data = tf.image.rgb_to_grayscale(pre_data)
3 pre_data = np.asarray(pre_data)
4 pre_data = np.squeeze(pre_data)
5 pre_data.shape
------------------------------->>4 frames<<----------------------------------
/usr/local/lib/python3.6/dist-packages/six.py in raise_from(value, from_value)
InvalidArgumentError: Matrix size-incompatible: In[0]: [250000,4], In[1]: [3,1] [Op:MatMul] name: rgb_to_grayscale/Tensordot/MatMul/
問題コード
※print()
などは省略しています。また、本来のColaboratory上のプログラムではセルに分かれているところを詰めて書いています(上手な書き方があれば教えて下さい)
import tensorflow as tf
import numpy as np
path = "/content/drive/My Drive/for_MikuChecker"
img = np.asarray(Image.open(path + "/run_check/yes/48911351_p0.png"))
img = tf.convert_to_tensor(img) # TensorShape([992, 622, 4])
size= h if h<w else w # w,h = (622, 992)
pre_data = tf.image.crop_to_bounding_box(img,int((h-size)/2),int((w-size)/2),size,size)
pre_data = tf.image.resize(pre_data,[500,500])
pre_data = tf.image.rgb_to_grayscale(pre_data)
pre_data = np.asarray(pre_data)
pre_data = np.squeeze(pre_data)
pre_data.shape
エラー発生場所
pre_data = tf.image.rgb_to_grayscale(pre_data)