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

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

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

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

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

Python

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

Q&A

解決済

3回答

5765閲覧

python OpenCV でimshow()ができない

yukimeat1999

総合スコア20

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

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

Python

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

0グッド

0クリップ

投稿2022/09/16 06:08

前提

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

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

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

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

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

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

guest

回答3

0

自己解決

Visual Studio2022上でimshow()することが出来たので解決法を記載します。

まず、can110さんの方法でコードを編集することでimshow()をjupyterで動かすことが出来ました。

しかし、Visual Studio2022では正常に動きませんでした。

そこで、過去にVisual Studio2022へpythonとOpenCVを導入した時に参考にしたサイトを探して、いじることにしました。

サイトの8.ぐらいから実行しました。
以下はサイトを参考にして記載。

8.パッケージ(ライブラリ)を追加準備
次にOpenCVなど必要なパッケージを入れるために、環境構築をします。VisualStudio のソリューションエクスプローラーの「Python環境」で右クリックし、「すべてのPython環境を表示」を選択してください。

9.パッケージ管理ソフトを選択
「概要」リストボックスから「パッケージ(PyPI)」を選択してください。

Pythonのバージョンが多数出てくる場合は、Pythonのバージョンは3.7以上を選択してください。バージョンが3.6以下の場合プログラムが動作しないことがあります。

10.必要なパッケージを追加
必要なライブラリをインストールするために、「PyPlとインストールされたパッケージの検索」のテキストボックスに次のワードを検索し、opencvとnumpyなど必要なパッケージをインストールしてください。

この手順によってopencvとnumpyが使用できます。

※画像はサイトを確認してください。

「9.」ではjupyterの環境も表示される。
ここで、PyPIでインストールもできるが、condaを選択してインストールもできる。
この辺の違いは分かっていませんが、condaを選択してpythonをインストールしようとしたら、インストールが終わらなかったり、PyPIの方でも、指定されてる同じ選択肢がなかったりするからjupyterの環境は無視した方がいいと思う。

次に、タブバー辺りのプルダウンリストから「環境を追加…」を選択。

イメージ説明

既存の環境」を開き、「環境(E)」のプルダウンリストから正常に環境をインストールできているもの(私の場合は、「Python 3.8 (64-bit)」)を選択して、「追加(A)」をクリックする。

イメージ説明

イメージ説明

※画像では、すでに「Python 3.8 (64-bit)」を追加しているので表示されていない。

最後に、再度タブバー辺りのプルダウンリストから先ほど追加した環境(私の場合は、「Python 3.8 (64-bit)」)を選択。

これでimshow()ができた。

投稿2022/09/21 06:31

yukimeat1999

総合スコア20

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

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

0

コメントを回答に記載したため削除

投稿2022/09/20 05:11

編集2022/09/20 05:11
can110

総合スコア38266

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

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

0

imgのshapeが(ファイル数,高,幅,3)のように意図しないものになっているはずです。
横に連結したい場合は img = np.concatenate(preparation_lt, axis=1)とすればよいです。

Python

1import numpy as np 2import cv2 3 4def pil2cv(image): 5 ''' PIL型 -> OpenCV型 ''' 6 new_image = np.array(image, dtype=np.uint8) 7 # カラー 8 new_image = cv2.cvtColor(new_image, cv2.COLOR_RGB2BGR) 9 return new_image 10 11if __name__ == "__main__": 12 13 preparation_lt = [] 14 preparation_lt.append(cv2.imread('temp.png')) 15 preparation_lt.append(cv2.imread('temp.png')) 16 17 #img = np.array(preparation_lt) # cv2.error: OpenCV(~ 18 #print(img.shape) # (2, 120, 180, 3) 19 img = np.concatenate(preparation_lt, axis=1) # 横方向に 20 print(img.shape) # (120, 360, 3) 21 22 cv2.imshow('hoge', img) 23 cv2.waitKey(0) 24 cv2.destroyAllWindows()

投稿2022/09/16 06:22

編集2022/09/16 06:26
can110

総合スコア38266

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

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

yukimeat1999

2022/09/20 04:59

ご回答ありがとうございます。 jupyterでは正常に画像を表示させることができました。 ただ、Visual Studio2022ではimshow()で例外がスローされました。 環境の問題かなと思うのですが、なにか分かりますでしょうか? エラー文 ```python OpenCV(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' ```
can110

2022/09/20 05:11

もし単純に読み込んだだけの画像を表示しようとしても同じエラーになるのであれば、環境の問題かと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問