エラーが出ました.
今、解析で5000ピクセル以上ある画像の各ピクセルをに2×2ピクセルずつに分割してそれぞれが持っている色情報を数値化したものの標準偏差を求めようとしてコードを打ち込んだところエラーが出ました.このエラーの解決方法が分かる方がいらっしゃったらよろしくお願いします.
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "C:/Users/USER/AppData/Roaming/JetBrains/PyCharmEdu2020.2/scratches/1125.py", line 9, in <module> img.reshape(img.shape[0]//x, x, img.shape[1]//y, y, 3).std((1, 3)) ValueError: cannot reshape array of size 84429063 into shape (2653,2,2651,2,3) Process finished with exit code 1
該当のソースコード
python
1import cv2 2import numpy as np 3 4FILEPATH = 'C:/Users/user/documents/xxxxx.bmp' 5img = cv2.imread(FILEPATH) 6IMG_SIZE = 4096 7data = np.empty(IMG_SIZE ** 2) 8x, y = (2, 2) 9img.reshape(img.shape[0]//x, x, img.shape[1]//y, y, 3).std((1, 3)) 10print(img.reshape) 11
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
質問のコードは以前の質問の回答そのままですか?そのままの場合は回答もらったときにはエラーは出なかったのですか? 改変されている場合はどこを変えたのか書かれると分かりやすいかと思います。
そのままで使ってます.
回答もらったものをそのまま使ってエラーが出ました.
> 回答もらったものをそのまま使ってエラーが出ました.
そうなんですね。回答者さんへも質問されているようですね。
画像の縦か横のピクセル数が奇数の場合はエラーが起こりそうです。
print(img.shape)
を実行したら、何て出ますか?
回答ありがとうございます.Traceback (most recent call last):と出てきました.
ピクセル数は縦、横ともに奇数でした.
なぜ奇数だとエラーが起こるのでしょうか?割り切れないからでしょうか?
img = cv2.imread(FILEPATH)
のすぐ下(次)に
print(img.shape)
を入れてみてください
数字が並ぶはずなんだけど
<built-in method reshape of numpy.ndarray object at 0x036D39D0>と出ました.
//は、割り算した結果の小数点以下を切り捨てて整数にします
https://attracter.tokyo/tech/python7/
> ピクセル数は縦、横ともに奇数でした
img.shape[0]//x
img.shape[0]が奇数だと2で割り切れないから、img.shape[0]//2 * 2 は img.shape[0] と一致しません
y方向も同じ
その結果、img.shape[0]//x * x * img.shape[1]//y * y * 3 は元の画素数 縦 * 横 * 3 (3は色) と違うので、reshapeできません
print(img.reshape)
ってやってませんか?
print(img.shape)
です
でもまあ、奇数と書いてあるので、分かりましたからもういいです
画像を「一定の範囲に分割」したら余らないように、予め画像を切り出せば、エラーが出なくなります
「一定の範囲」が2x2しか無いのなら、奇数ならば最初か最後だけ捨てて偶数にすればいいですが、2x2以外にもすることを想定しているのなら、それに対応した数にしなければいけません
画素数を 画素数//分割数*分割数 にしたら余らずに分割できるので、縦横それぞれでその計算をして、そのサイズだけ切り出すとか
回答1件
あなたの回答
tips
プレビュー