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

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

新規登録して質問してみよう
ただいま回答率
85.50%
OpenCV

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

2回答

1404閲覧

ty矢印キーで画像の切り替えたい

退会済みユーザー

退会済みユーザー

総合スコア0

OpenCV

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

1クリップ

投稿2018/06/26 14:08

編集2018/06/27 06:34

現時点でOpenCVあるいはPillow、PILのいずれかを使い、画像を表示しています。

しかし、ただ表示するのではなく、表示する画像を「矢印キー」で切り替えたいです。

調べても、矢印キーではうまくいかないという情報しか見つかりませんでした。

矢印キーで画像を切り替えて表示することは、不可能なのでしょうか?

画像の処理をOpenCVでやって、表示は別のモジュールで・・・というやり方であっても、情報が欲しいです。

実行環境はWindows10(できれば、MacやLinuxでも)です。

回答よろしくお願いします。

追記

https://twitter.com/amdkkj/status/875877581802749952

上のTwitterのように、矢印キーが押されたかどうかは検出できましたが、どの方向のキーが押されたのかを取得できません。

どの方向のキーが押されたのかよって画像を切り替えたいです。(右なら次の画像、左なら前の画像を表示するというように)

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

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

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

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

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

LouiS0616

2018/06/26 14:17

『矢印キーではうまくいかないという情報』はどこのサイトに書いてあったのですか。
guest

回答2

0

ベストアンサー

画像の処理をOpenCVでやって、表示は別のモジュールで・・・というやり方であっても、情報が欲しいです。
実行環境はWindows10(できれば、MacやLinuxでも)です。

ハリボテですが、OpenCV + PyQt で書いてみました。

main.py

Python

1import sys 2 3import cv2 4 5from PyQt5.QtCore import Qt, QObject, pyqtSlot 6from PyQt5.QtWidgets import QApplication 7 8from img_view import ImageView, convert_npimg_to_pixmap 9 10 11class Main(QObject): 12 def __init__(self, cvimg): 13 QObject.__init__(self, parent=None) 14 self._app = QApplication(sys.argv) 15 16 self._key_to_func = { 17 Qt.Key_Right: self.next_img, 18 Qt.Key_Left: self.prev_img, 19 } 20 21 viewer = ImageView(parent=None) 22 viewer.key_pressed.connect(self.key_pressed) 23 viewer.set_image( 24 convert_npimg_to_pixmap(cvimg) 25 ) 26 viewer.show() 27 28 sys.exit( 29 self._app.exec_() 30 ) 31 32 @pyqtSlot(int) 33 def key_pressed(self, key): 34 if key in self._key_to_func: 35 self._key_to_func[key]() 36 else: 37 print(key) 38 39 def next_img(self): 40 print('show next img.') 41 42 def prev_img(self): 43 print('show prev img.') 44 45 46if __name__ == '__main__': 47 img = cv2.imread(r'./Lenna.jpg') 48 assert img is not None 49 50 _ = Main(img)

img_view.py

Python

1from PyQt5.QtCore import pyqtSignal 2from PyQt5.QtGui import QImage, QPainter, QPixmap 3from PyQt5.QtWidgets import QWidget 4 5 6def convert_npimg_to_pixmap(npimg): 7 height, width, depth = npimg.shape 8 assert depth == 3 9 10 return QPixmap( 11 QImage(npimg, width, height, width * 3, QImage.Format_RGB888).rgbSwapped() 12 ) 13 14def read_img_as_pixmap(filename: str): 15 return QPixmap(filename) 16 17 18class ImageView(QWidget): 19 key_pressed = pyqtSignal(int) 20 21 def __init__(self, parent=None): 22 QWidget.__init__(self, parent) 23 self._pixmap = None 24 25 # Override 26 def paintEvent(self, event): 27 if self._pixmap is None: 28 return 29 30 size = self._pixmap.width(), self._pixmap.height() 31 32 self.resize(*size) 33 QPainter(self).drawPixmap( 34 0, 0, *size, self._pixmap 35 ) 36 37 # Override 38 def keyPressEvent(self, key_event): 39 self.key_pressed.emit(key_event.key()) 40 41 def set_image(self, pixmap): 42 self._pixmap = pixmap 43 self.update()

動作確認環境

  • Windows10
  • Python3.6.2
  • opencv3.3.0
  • qt5.6.2

使っているのはcondaで放り込んだ野良バイナリです。

投稿2018/06/27 15:51

LouiS0616

総合スコア35658

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

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

0

もし切り替えるのが複数のカメラの映像であればと理解して回答します。
Pythonではまだ試していませんがC++の環境では、複数のカメラをオープンして、またwaitKey関数での入力値でどの映像をimshowするかの切替は容易です。

またimshowして映像を表示する際、imashowだけでなく必ずwaitKeyを呼ばないと適切に描画されません。

よって回答として①どの映像を描画するか?②そのためにどの映像を描画しているかのフラッグを持って映像の取得後の処理を行う。

といった流れになります。

投稿2018/06/27 00:20

MasahikoHirata

総合スコア3747

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

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

退会済みユーザー

退会済みユーザー

2018/06/27 06:30

「複数のカメラの映像」とはどういうことなのですか? キャプチャーではなく、あくまで複数枚の画像を切り替えたいです。 waitKeyの返り値から矢印キーはどのようにして得られますか? 矢印キーが押されたかどうかではなく、どの方向の矢印キーが押されたかまで取得したいです。
退会済みユーザー

退会済みユーザー

2018/06/27 13:45

矢印キーのどのキーを押しても0と表示されます。どの方向キーなのか確認する術はありませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問