teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

細かく説明

2017/12/30 05:08

投稿

退会済みユーザー
answer CHANGED
@@ -1,12 +1,18 @@
1
1
  たぶん全然初歩的な質問ではないですよ。
2
2
 
3
+ ---
4
+
3
5
  たとえば[Stackoverflow](https://stackoverflow.com/questions/13734276/python-freezes-after-cv2-destroywindow)のuser1899365さんの回答が参考になりますね。
4
6
 
5
7
  - LinuxベースのOS(MACを含む)のバグ
6
8
  - 質問に短く答えるなら`waitKey()`をはさめばOK
7
9
 
8
- だそうです。user1899365さんがさらに[勧めるリンク先(stackoverflow)](https://stackoverflow.com/questions/6116564/destroywindow-does-not-close-window-on-mac-using-python-and-opencv)のsusmitsさんによれば、
10
+ だそうです。
9
11
 
12
+ ---
13
+
14
+ user1899365さんがさらに[勧めるリンク先(stackoverflow)](https://stackoverflow.com/questions/6116564/destroywindow-does-not-close-window-on-mac-using-python-and-opencv)のsusmitsさんによれば、
15
+
10
16
  - OpenCVをGUI(Gtk+)で使った時のクセで、`cv2.destroyAllWindows()`をしたときにWindowを閉じるのがポシャる
11
17
  - `cv2.destroyAllWindows()`の後にイベントを起こすために`waitKey()`を入れる
12
18
  - ただ、`waitKey()`が有効なのはWindowがアクティブな間だけなので、次の`cv2.destroyAllWindows()`を呼び出さない限りまだ表示されているかも
@@ -14,7 +20,31 @@
14
20
  また、elaRoscaさんによれば、
15
21
  - windowを作るときに`cv.StartWindowThread()`をして、そこで表示
16
22
 
17
- コメントとして、
18
- - user1899365さんの`waitKey()`と`cv.StartWindowThread()`を合わせるとさらによい
23
+ **恐らく一番良い対策は、同欄コメントにある`waitKey()`と`cv.StartWindowThread()`を合わせるとさらによい**、だと思いますので、その様に実装するのが良いと思います。
19
24
 
25
+ コピペですが…
26
+ ```Python
27
+ import cv2 as cv
28
+ import time
29
+
30
+ WINDOW_NAME = "win"
31
+
32
+ image = cv.imread("ela.jpg", cv.CV_LOAD_IMAGE_COLOR)
33
+ cv.namedWindow(WINDOW_NAME, cv.CV_WINDOW_AUTOSIZE)
34
+ initialtime = time.time()
35
+
36
+ cv.startWindowThread()
37
+
38
+ while (time.time() - initialtime < 5):
39
+ print "in first while"
40
+ cv.imshow(WINDOW_NAME, image)
41
+ cv.waitKey(1000)
42
+
20
- のように書いてあります。
43
+ cv.waitKey(1)
44
+ cv.destroyAllWindows()
45
+ cv.waitKey(1)
46
+
47
+ initialtime = time.time()
48
+ while (time.time() - initialtime < 6):
49
+ print "in second while"
50
+ ```