前提
pythonのOpenCVで画像の読み込みと表示をしています。
しかし、imshow()
をしても画像が表示されません。
読み込もうとしている画像は横長の写真です。
空が映ってるはずなのですが。
環境はVisual Studio2022とjupyterでやっています。
色々試していて、画像を表示させる枠や、上のウィンドウと閉じるボタンだけが表示されるようになりました。
実現したいこと
OpenCVで画像を読み込んで表示させたい。
ゆくゆくはパノラマ画像の連結をpythonのOpenCVで行うため。
発生している問題・エラーメッセージ
jupyter 環境1
python
1Image is read. 2H:\headrace\img2_s3l\img2_s3l\trims_3l00001.png 3 4--------------------------------------------------------------------------- 5error Traceback (most recent call last) 6Input In [1], in <cell line: 19>() 7 43 #img = pil2cv(preparation_lt) 8 44 img = np.array(preparation_lt) 9---> 46 cv2.imshow(f'trims_3l{i:05}.png', img) 10 47 cv2.waitKey(0) 11 48 cv2.destroyAllWindows() 12 13error: OpenCV(4.5.5) C:\ci\opencv-suite_1656607046074\work\modules\core\src\array.cpp:2494: error: (-206:Bad flag (parameter or structure field)) Unrecognized or unsupported array type in function 'cvGetMat'
jupyter 環境2
python
1Image is read. 2H:\headrace\img2_s3l\img2_s3l\trims_3l00001.png 3 4--------------------------------------------------------------------------- 5error Traceback (most recent call last) 6Input In [1], in <cell line: 19>() 7 43 #img = pil2cv(preparation_lt) 8 44 img = np.array(preparation_lt) 9---> 46 cv2.imshow(f'trims_3l{i:05}.png', img) 10 47 cv2.waitKey(0) 11 48 cv2.destroyAllWindows() 12 13error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window_w32.cpp:124: error: (-215:Assertion failed) bmi && width >= 0 && height >= 0 && (bpp == 8 || bpp == 24 || bpp == 32) in function 'FillBitmapInfo'
Visual Studio2022
cv2.imshow(f'trims_3l{i:05}.png', img)
ここで、「例外がスローされました」と表示される。
python
1OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:1267: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'
該当のソースコード
python
1import argparse 2import numpy as np 3import cv2 4import os 5 6 7left_photo_path = r'H:\headrace\img2_s3l\img2_s3l' 8 9preparation_path = r'H:\headrace\preparation' 10create_path = r'H:\headrace\create' 11 12def pil2cv(image): 13 ''' PIL型 -> OpenCV型 ''' 14 new_image = np.array(image, dtype=np.uint8) 15 # カラー 16 new_image = cv2.cvtColor(new_image, cv2.COLOR_RGB2BGR) 17 return new_image 18 19 20if __name__ == "__main__": 21 22 os.makedirs(preparation_path, exist_ok=True) 23 24 # for文 質問用に簡単な文に編集している 25 i = 1 26 27 preparation_lt = [] 28 29 # H:\headrace\img2_s3l\img2_s3l\trims_3l00001.png 30 file1l = os.path.join(left_photo_path, f'trims_3l{i:05}.png') 31 preparation_lt.append(cv2.imread(file1l)) 32 # test 33 # cv2.imshow('test', preparation_lt) 34 # cv2.waitKey(0) 35 # cv2.destroyAllWindows() 36 37 if preparation_lt: 38 print('Image is read.') 39 else: 40 print('Image is not read.') 41 42 print(os.path.join(left_photo_path, f'trims_3l{i:05}.png')) 43 44 #img = pil2cv(preparation_lt) 45 img = np.array(preparation_lt) 46 47 cv2.imshow(f'trims_3l{i:05}.png', img) 48 cv2.waitKey(0) 49 cv2.destroyAllWindows() 50 print(f'show: trims_3l{i:05}.png')
試したこと
・imshow()の後にwaitkey()を配置
・こちらを参考に、NumPy配列?を変換
・jupyterで実行後にimgを表示
以下imgの表示内容を一部抜粋
python
1array([[[[ 0, 3, 0], 2 [ 0, 3, 0], 3 [ 0, 3, 0], 4 ..., 5 [254, 248, 224], 6 [254, 248, 225], 7 [254, 248, 225]], 8 9 # (中略) 10 11 [ 17, 32, 25], 12 [ 17, 32, 25], 13 [ 17, 32, 25]]]], dtype=uint8)
補足情報
OS: Windows10
Anaconda3上のjupyter notebook
Anaconda Navigator
Ver. 2.3.0
jupyter notebook
Ver. 6.4.12
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
回答3件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。