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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

3836閲覧

python+opencvのwhile文の部分について

garyuuin

総合スコア8

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

1クリップ

投稿2017/10/30 14:57

opencvとpythonのトラックバーをつけるデモを触っているのですがこのプログラムで右上に出てくる×ボタンを押して消すとバグのようなものが起こります。×ボタンを押しても消せるようにしたいのですがどのようにすれば良いのでしょうか?分かる方是非教えてください。

import cv2
import numpy as np

def nothing(x):
pass

Create a black image, a window

img = np.zeros((300,512,3), np.uint8)
cv2.namedWindow('image')

create trackbars for color change

cv2.createTrackbar('R','image',0,255,nothing)
cv2.createTrackbar('G','image',0,255,nothing)
cv2.createTrackbar('B','image',0,255,nothing)

create switch for ON/OFF functionality

switch = '0 : OFF \n1 : ON'
cv2.createTrackbar(switch, 'image',0,1,nothing)

while(1):
cv2.imshow('image',img)
k = cv2.waitKey(1) & 0xFF
if k == 27:
break

# get current positions of four trackbars r = cv2.getTrackbarPos('R','image') g = cv2.getTrackbarPos('G','image') b = cv2.getTrackbarPos('B','image') s = cv2.getTrackbarPos(switch,'image') if s == 0: img[:] = 0 else: img[:] = [b,g,r]

cv2.destroyAllWindows()

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

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

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

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

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

guest

回答1

0

ベストアンサー

興味深かったので、調べてみました。
stackoverflow - OpenCV Python: How to detect if a window is closed?

Python

1import cv2 2 3WINDOW_NAME = 'Sample' 4img = cv2.imread('lenna.jpg') 5 6while True: 7 cv2.imshow(WINDOW_NAME, img) 8 key = cv2.waitKey(10) 9 if key == 27 or cv2.getWindowProperty(WINDOW_NAME, cv2.WND_PROP_VISIBLE) < 1: 10 break

少しだけ書き換えた上記のコードで、動作を確認できました。
ただし、実行環境はPython3.xです。2.7でも大丈夫かと思いますが...

(通信の調子があまりよくないのかもわかりませんが...)
(30分放置しても、2.7用のcv2のインストールが1/4しか終わらないのです。ごめんなさい。)

確認が取れ次第追記します。

追記
動作確認できました。Python2.7でもコードに変更点はございません。
ただし、OpenCVのバージョンが3.2.0以上である必要があります。
なぜなら、3.2以前にはモジュール定数WND_PROP_VISIBLEが存在しないからです。

古いバージョンしか使えない場合は、別のアプローチを取る必要があります。


teratailには、上記のようなコードを見やすく表示する機能があります。
編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
特にPythonの場合、インデントが崩れるとコードの意味が変わってきます。

投稿2017/10/30 16:15

編集2017/10/31 05:08
LouiS0616

総合スコア35658

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

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

garyuuin

2017/10/31 22:35

とても丁寧な説明ありがとうございました。 これを参考に無事解決することができました。 また、codeの表示方法まで教えて頂き感謝しかありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問