2017-12-01 12 views
0

私はpythonとopencvでプロジェクトを作って、2点間の距離を測定し、それらの値をリアルタイムで別のPCに転送します。リアルタイムデータをopencvのpythonでtxtファイルに保存

私はテキストファイルのコードから取得したリアルタイムデータをエクスポートする必要がありますが、現在は作成できません。ファイルを作成できますが、これは空です。 この写真のような列にデータが表示されている必要があります。

TEST

コードはこれです:

import cv2 
import numpy as np 
#Captura de video a traves de la webcam 
cap=cv2.VideoCapture(0) 
D = [] 
max_samples = 10000 

while(1): 
    with open('new.txt', 'w') as outfile: 
     d=0.1 
     centers=[] 
     _, img = cap.read() 

     hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) #Se obtiene un histograma basada en las saturaciones de colores. 

     blue_lower=np.array([95,150,100],np.uint8) 
     blue_upper=np.array([150,255,255],np.uint8) 

     blue=cv2.inRange(hsv,blue_lower,blue_upper) #Se crea una mascara utilizando intervalos de color azul. 

     kernel = np.ones((5 ,5), "uint8") #Crea una matriz de 5x5 la cual recorrera el video, 
     blue = cv2.morphologyEx(blue,cv2.MORPH_OPEN,kernel) 
     blue = cv2.morphologyEx(blue,cv2.MORPH_CLOSE,kernel)  

     blue=cv2.erode(blue,kernel, iterations=1) #Se erosiona utilizando el kernel sobre la mascara. 
     res1=cv2.bitwise_and(img, img, mask = blue) #La nueva imagen reemplazara a blue. 


     (_,contours,hierarchy)=cv2.findContours(blue,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) #Encuentra los contornos de los objetos que se ven en el filtro 

     for pic, contour in enumerate(contours): 
      area = cv2.contourArea(contour) #funcion de opencv que obtiene los contornos 
      mayor_contorno = max(contours, key = cv2.contourArea) 

      if(area>1000): 
       x,y,w,h = cv2.boundingRect(contour) #Encuentra coordenadas de los contornos. 
       img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) 
       cv2.putText(img,"Marcador",(x,y),cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,0,0)) 
       M = cv2.moments(contour) #Se obtiene el centro de masa de los marcadores enconrados. 
       cx = int(M['m10'] /M['m00']) 
       cy = int(M['m01'] /M['m00']) 
       centers.append([cx,cy]) 
       cv2.circle(img, (cx, cy), 7, (255, 255, 255), -1) 

      if len(centers)==2: 
       D = (np.linalg.norm(cx-cy))/10 #Se aplica distancia euclidiana para encontrar la distancia entre los centros de masa. 
       print(D) 
       outfile.write(" %d \n") 

     cv2.imshow("Color Tracking",img) 
     if cv2.waitKey(10) & 0xFF == ord('q'): 
      outfile.close() 
      print('The data is now the the new.txt file') 
      cap.release() 
      cv2.destroyAllWindows() 
      break 
+0

'outfile.write( "{0} \ n" は.format(D))' '代わりに' outfile.write( "%d個の\ nを")のこれを入れているのを助けるかもしれません何も書いていません – user1767754

答えて

0

問題は、不適切な方法でwithの使用によって引き起こされますが、そのコンテキストを出るとき、それは破壊され、それに変数を作成するときに、あなたの場合はoutfileを作成し、その反復の終わりには削除しています(内部的には閉じています)。そして、もう一方の反復では別のoutfileを作成していて、それらを削除しています。あなたのケースでは

は、私がループする前に、ファイルを開くことをお勧めします:

outfile = open('new.txt', 'w') 

while True: 
    d=0.1 
    centers=[] 
    _, img = cap.read() 
    [...] 
+0

ありがとう!今は完璧に動作します:) – pipee780

0

私は少しOpenCVの上で働いています。 たぶん、このリンクが

outfile.write(" %d \n" %D) 
関連する問題