0

Python 2.7.12 で cv2 として opencv3.1 を使用します。私が現在抱えている問題は、複数の指示に従っているにもかかわらず、それらすべてが自分と同じ設定、または少なくとも非常に似た設定を使用しているように見えることです。私は主に、openCV.orgCodeGenerater の Blogspot チュートリアル の2 つの例を使用しています。コールバック関数を作成するか、または を使用することを忘れませんでしたcv2.getTrackbarPos。私がそれを行う特定の順序または画像表示ループに何か問題があるに違いないと感じています。これが私が持っているものです。最初のトラックバーのしきい値で画像を表示しますが、トラックバーのコールバックで画像を更新しません:

import cv2


#write simple callback function to pass trackbar position as *arg    
def callback(*arg): 
    pass

#create display window for image
cv2.namedWindow('frame') 

#read in image
img = cv2.imread(r'/home/Usr/Documents/Aerial-Images/images_with_targets/Flight_4/target_10.jpg',0)

#instantiate trackbar that goes in our named window and uses callback function
cv2.createTrackbar('thresh2','frame',5,15,callback)

#initialize thresholds
thresh1=11
thresh2=5

#loop really just runs until the escape key causes a break
while(True):

    #sets threshold 2 to trackbar position
    thresh2=cv2.getTrackbarPos('thresh2','frame')   
    #apply laplacian filter to ehance edge gradients
    th = cv2.Laplacian(img,cv2.CV_8UC1)
    #binarize image with adaptive threshold
    th = cv2.adaptiveThreshold(th,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,thresh1,thresh2) 

    #show filtered image
    cv2.imshow('frame',th)
    #waits for escape key then breaks out of loop
    if cv2.waitKey(0) & 0xFF == ord('q'):
        break


#close our display window     
cv2.destroyallwindows()
4

2 に答える 2

0

答えは実にシンプルでした。私が書いた古いコードを見て、待機キーを 0 から 1 に変更する必要があることに気付きました。

if cv2.waitKey(0) & 0xFF == ord('q'):
    break

なりました

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

私が見ていなかったのは、 Camel Case を忘れていたことcv2.destroyAllWindowsです。これにより、表示ループが実際には実行されていないのにまだ実行されていると思いました。

于 2016-09-30T17:46:40.077 に答える