2017-05-26 37 views
1

我使用opencv通過使用HSV trackbars值來檢測對象的顏色,我希望我的python代碼保存我在opencv中對trackbars所做的最新更改,當我再次啓動代碼時,trackbars將會有最後一個值?下面是我的代碼如何在使用Opencv關閉Python代碼之後保存跟蹤欄值?

import numpy as np 
import cv2 

# open the camera 
cap = cv2.VideoCapture(0) 

def nothing(x): 
    pass 
cv2.namedWindow('result') 

# Starting with 100's to prevent error while masking 
h,s,v = 100,100,100 

# Creating track bar 


cv2.createTrackbar('h', 'result',0,179,nothing) 
cv2.createTrackbar('s', 'result',0,255,nothing) 
cv2.createTrackbar('v', 'result',0,255,nothing) 

while True: 

     #read the image from the camera 
     ret, frame = cap.read()   

     #You will need this later 
     frame = cv2.cvtColor(frame, 35) 



     #converting to HSV 
     hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) 


     # get info from track bar and appy to result 
     h = cv2.getTrackbarPos('h','result') 
     s = cv2.getTrackbarPos('s','result') 
     v = cv2.getTrackbarPos('v','result') 


     # Normal masking algorithm 
     lower_blue = np.array([h,s,v]) 
     upper_blue = np.array([180,255,255]) 

     mask = cv2.inRange(hsv,lower_blue, upper_blue) 

     result = cv2.bitwise_and(frame,frame,mask = mask) 

     cv2.imshow('result',result) 

     #find center 
     cnts=cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2] 

     center=None 

     if len(cnts)>0: 
      c=max(cnts, key=cv2.contourArea) 
      ((x,y),radius)=cv2.minEnclosingCircle(c) 
      M=cv2.moments(c) 
      center=(int(M["m10"]/M["m00"]), int(M["m01"]/M["m00"])) 

      if radius>10: 
       #cv2.circle(frame, (int(x),int(y)), int(radius), 2) 
       cv2.circle(frame, center,5,(0,0,255),-1) 



     # color detection limits 
     lB = 5 
     lG = 50 
     lR = 50 
     hB = 15 
     hG = 255 
     hR = 255 
     lowerLimits = np.array([lB, lG, lR]) 
     upperLimits = np.array([hB, hG, hR]) 

     # Our operations on the frame come here 
     thresholded = cv2.inRange(frame, lowerLimits, upperLimits) 
     outimage = cv2.bitwise_and(frame, frame, mask = thresholded) 


     cv2.imshow('original', frame) 

     # Display the resulting frame 
     cv2.imshow('processed',outimage) 




     # Quit the program when Q is pressed 
     if cv2.waitKey(1) & 0xFF == ord('q'): 
       break 

# When everything done, release the capture 
print 'closing program' 
cap.release() 
cv2.destroyAllWindows() 

回答