前提
pythonのOpenCVで画像の読み込みと書き出しをしています。
しかし、imwrite()
をしても画像が書き出しされません。
(imshow()
はできました)
読み込もうとしている画像は横長の写真です。
空が映ってるはずなのですが。
環境はVisual Studio2022でやっています。
追記
質問への追記・修正の依頼より、imwrite()
はできました。
パノラマ画像の連結ができてないようです。
実現したいこと
・OpenCVで画像を読み込んで書き出したい。
・パノラマ画像の連結をする。
発生している問題・エラーメッセージ
python
1# エラー文 2OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp:801: error: (-215:Assertion failed) !_img.empty() in function 'cv::imwrite'
私のPCの環境では、DドライブにはBDドライブがついてるのですが、なぜかエラー文中にDドライブのディレクトリが表示されている。
該当のソースコード
python
1import numpy as np 2import cv2 3import os 4 5 6left_photo_path = r'H:\headrace\img2_s3l\img2_s3l' 7upper_photo_path = r'H:\headrace\img2_s3t\img2_s3t' 8 9preparation_path = r'H:\headrace\preparation' 10create_path = r'H:\headrace\create' 11 12# modes = (cv2.Stitcher_PANORAMA, cv2.Stitcher_SCANS) 13 14Stitcher_PANORAMA = cv2.Stitcher.create(0) 15Stitcher_SCANS = cv2.Stitcher.create(1) 16 17if __name__ == "__main__": 18 19 os.makedirs(preparation_path, exist_ok=True) 20 21 # for文 質問用にfor文を削除し,簡単な文に編集している 22 i = 1 23 24 preparation_lt = [] 25 26 # H:\headrace\img2_s3l\img2_s3l\trims_3l00001.png 27 preparation_lt.append(cv2.imread(os.path.join(left_photo_path, f'trims_3l{i:05}.png'))) 28 preparation_lt.append(cv2.imread(os.path.join(upper_photo_path, f'trims_3t{i:05}.png'))) 29 30 print(os.path.join(left_photo_path, f'trims_3l{i:05}.png')) 31 32 np_preparation_lt = [] 33 np_preparation_lt = np.concatenate(preparation_lt, axis=1) # 横方向に 34 35 36 #cv2.imshow(f'np_preparation_lt', np_preparation_lt) 37 #cv2.waitKey(0) 38 #cv2.destroyAllWindows() 39 #print(f'show: trims_3l{i:05}.png') 40 41 # パノラマ書き出し 42 stitched = Stitcher_PANORAMA.stitch(np_preparation_lt) 43 cv2.imwrite(os.path.join(preparation_path, f'create_preparation_lt_{i:05}.png'), stitched[1]) 44 print(f'create: lt_{i:05}.png') 45 stitched.clear() 46 preparation_lt.clear() 47 np_preparation_lt.clear()
試したこと
・imshow()
が出来る様にした。
・ディレクトリが間違っていないか確認のためprint()した。
以下は、質問への追記・修正の依頼より
1)jbpb0さんからの質問への追記・修正の依頼1つ目
cv2.imwrite(os.path.join(preparation_path, f'create_preparation_lt_{i:05}.png'), stitched[1])
のすぐ上に
print(stitched[1].shape)
を追加して実行したら、何て表示されますでしょうか?
print()がオーバースローされ、エラーが表示されました。
python
1# エラー文 2'NoneType' object has no attribute 'shape'
デバッグ状態で、stitched[1]
を見てみると、
python
1# デバッグ文 2stitched(1, None)
が入っていました。
どこかのサイトでパノラマ作成時のエラー対策で、stitched[1]を使ってたと思ったんですが。
さらに、print(stitched[0].shape)
として、配列の[0]を代入すると、
python
1# エラー文 2'int' object has no attribute 'shape'
と、エラーが表示された。
2)jbpb0さんからの質問への追記・修正の依頼2つ目
(imshow()はできました)
「imshow()」で表示されてる画像をそのまま保存すればいいのなら、下記のようにしたらいいような
stitched = Stitcher_PANORAMA.stitch(np_preparation_lt)
cv2.imwrite(os.path.join(preparation_path, f'create_preparation_lt_{i:05}.png'), stitched[1])
↓ 変更
cv2.imwrite(os.path.join(preparation_path, f'create_preparation_lt_{i:05}.png'), np_preparation_lt)
np_preparation_lt
をimwrite()すると、配列のように画像が横(右)にそのままつながった状態の画像が書き出しされました。
補足情報
OS: Windows10
Visual Studio 2022
Microsoft Visual Studio Community 2022 (64 ビット) - Current
Version 17.3.4
Python 3.8.5
Opencvは多分これ
opencv-4.6.0-vc14_vc15

回答1件
あなたの回答
tips
プレビュー