2016-12-04 3 views
0

私は立ち往生しています。私のコードは吸う。私のシルダースもうまくいきませんが、無限の画像ウィンドウが私をナットにしています。 namedWindowを閉じると、画像と共に新しい表示ウィンドウが開きます(無限に)。助けて?イメージウィンドウを閉じると、別のウィンドウが表示されます。どうして?

import numpy as np 
import cv2 
from pylepton import Lepton 

#setup the Lepton image buffer 
def capture(device = "/dev/spidev0.0"): 
    with Lepton() as l: 
     a,_ = l.capture()  #grab the buffer 
    cv2.normalize(a, a, 0, 65535, cv2.NORM_MINMAX) # extend contrast 
    np.right_shift(a, 8, a) # fit data into 8 bits 
    return np.uint8(a) 


#Create a window and give it features 
def nothing(x): 
    pass 
cv2.namedWindow('flir', cv2.WINDOW_NORMAL) 
cv2.moveWindow('flir',1,1) 
cv2.createTrackbar('thresh','flir',50,100,nothing) 
cv2.createTrackbar('erode','flir',5,100,nothing) 
cv2.createTrackbar('dilate','flir',7,100,nothing) 

#process the buffer into an image on a continuous loop  
while True: 

    #update the image processing variables 
    thresh = cv2.getTrackbarPos('thresh', 'flir') 
    erodeSize = cv2.getTrackbarPos('erode', 'flir') 
    dilateSize = cv2.getTrackbarPos('dilate', 'flir') 

    image = capture() 

    #apply some image processing 
    blurredBrightness = cv2.bilateralFilter(image,9,150,150) 
    thresh = 50 
    edges = cv2.Canny(blurredBrightness,thresh,thresh*2, L2gradient=True) 
    _,mask = cv2.threshold(blurredBrightness,200,1,cv2.THRESH_BINARY) 
    erodeSize = 5 
    dilateSize = 14 
    eroded = cv2.erode(mask, np.ones((erodeSize, erodeSize))) 
    mask = cv2.dilate(eroded, np.ones((dilateSize, dilateSize))) 
    adjusted_image = cv2.resize(cv2.cvtColor(mask*edges, cv2.COLOR_GRAY2RGB) | image, (640, 4$ 
    final_image = cv2.applyColorMap(adjusted_image, cv2.COLORMAP_HOT) 

    #display the image 
    cv2.imshow('flir', final_image) 

    if cv2.waitKey(1) == ord('q'): 
     break 

cv2.waitKey() 
cv2.destroyWindow('flir') 
+0

あなたはwhile whileを持っているので、ループの最後にウィンドウを閉じてからwhileブロックの始めからやり直します。これは永遠にこれを行います! – Ali

答えて

3

まず、落ち着いてください。

第2に、コードをよく見てください。ウィンドウを閉じると理由ラインで、あなたに何か良いをしないだろう。

cv2.imshow('flir', final_image)

cv2.destroyWindow('flir') 

を何これらの2はタンデムでやっていることは、あなたが新しいウィンドウでフレームを表示しているということです、それを破壊してから、そのウィンドウをimshowに作り直して、次のフレームを表示して、それを破棄するなどしています。

これは、あなたのちらつきウィンドウを説明するはずです。

あなたのプログラムの実行を停止するには、このコードを追加しました:

これが意味する何
if cv2.waitKey(1) == ord('q'): 
     break 

あなたは、キーボードの「Q」を押すと、お使いの画像ウィンドウにフォーカスがある間、ということです、あなたのwhileループあなたのプログラムは終了します。

cv2.destroyWindowを削除し、 'q'キーを使用してアプリケーションを終了することをお勧めします。

+1

明確な答えをありがとう。ドラマのために申し訳ありません。その時点で2時だったので、私は不満を抱いていた。 –

関連する問題