我正在使用python和opencv创建一个项目来测量两点之间的距离,然后将这些值实时传输到另一台PC。
我需要从文本文件中的代码中导出实时数据,但目前我无法创建,我可以创建文件,但这是空的。 我需要将数据显示在如此图片的列中。
代码是这样的:
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 :(得分:0)
问题是由于with
以不适当的方式使用,当你用它创建一个变量时它会在离开那个上下文时被破坏,在你创建outfile的情况下,以及在迭代结束时你正在消除(在内部它正在关闭),而在另一个迭代中你正在创建另一个outfile而你正在删除它们。
在您的情况下,我建议在循环之前打开文件:
outfile = open('new.txt', 'w')
while True:
d=0.1
centers=[]
_, img = cap.read()
[...]
答案 1 :(得分:0)
我曾经在opencv上工作过一段时间。 也许这个链接可能有帮助
outfile.write(" %d \n" %D)