DIVFL.py 跟隨主程式
import numpy as np import cv2 from PARAM import * from DIV2 import DIV from motorm import turn from Fcolor import Fcolor from time import time from time import sleep XC=int(Lx/2); YC=int(Ly/2) acc,r1,r2=Fcolor() cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, Lx) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, Ly) fourcc = cv2.VideoWriter_fourcc(*'XVID') frate=1/0.15 out = cv2.VideoWriter('DIVFL.avi', fourcc, frate, (Lx,Ly)) FW=open('DIVFL.txt','w') t=0; tm=0. while(tm < 120 and cap.isOpened()): #while(t < 10 and cap.isOpened()): ret,frame = cap.read(); t+=1; if(t==1): t0=round(time(),2); t2=t0; t1=round(time(),2); tm=round(t1-t0,2); dt=round(t1-t2,2); t2=t1 if ret == True: out.write(frame) #cv2.imshow('frame',frame) img1,img2,NB1,BXY=DIV(r1,r2,frame) a=np.arange(3) if(NB1==0): DR=-1;X0=0;Y0=0; X1=XC; Y1=YC else: A=np.array(BXY); XA=A[:,0]; YA=A[:,1] X0=round(np.average(XA)+0.5,2); Y0=round(np.average(YA)+0.5,2) X1=int(X0*F*10); Y1=int(Y0*F*10) if(X0 < 2): DR=3 elif(X0 > 6): DR=7 else: DR=1 if(NB1>12): DR=0 img3=frame[Y1:Y1+10,X1:X1+10,:] for n in range(3): a[n]=int(np.average(img3[:,:,n:n+1])) cv2.circle(img1,(X1,Y1), 10, (0, 255, 255), 2) img3=cv2.resize(frame, (XC,YC), interpolation=cv2.INTER_AREA) img4=cv2.resize(img1, (XC,YC), interpolation=cv2.INTER_AREA) #cv2.imshow('img2', img2) cv2.imshow('img3', img3) cv2.imshow('img4', img4) if(t==1): cv2.waitKey(0);t0=round(time(),2); t2=t0; t1=round(time(),2); tm=round(t1-t0,2); dt=round(t1-t2,2); t2=t1 #print(t,tm,DR,NB1,X0,Y0,a) st=('%4d %6.2f %4d %4d %3d %3d %4d %4d %4d' \ %(t,tm,DR,NB1,X0,Y0,a[0],a[1],a[2])) print(st) if cv2.waitKey(1) & 0xFF == ord('q'): break #DR=0 if(DR==1): turn(0.3,0.3,0.05); turn(0,0,0.01); if(DR==0): turn(0.,0.,0.05); turn(0,0,0.01); if(DR==-1): turn(-0.4,0.4,0.05); turn(0,0,0.05); if(DR==-2): turn(-0.3,-0.3,0.05); turn(0,0,0.01); if(DR==3): turn(0.0,0.4,0.05); turn(0,0,0.01); if(DR==7): turn(0.4,0.2,0.05); turn(0,0,0.01); else: break cap.release() out.release() cv2.destroyAllWindows() |
DIV2.py 窗格分析
import numpy as np import cv2 from PARAM import * def DIV(r1,r2,img): img1=np.copy(img) img2=cv2.resize(img1, (Lx2,Ly2), interpolation=cv2.INTER_AREA) SS=0; cen=[]; NCC=[]; NCD=[]; NK=0 D=10; NX=int(Lx2/D); NY=int(Ly2/D) NB1=0; NB=0; BXY=[] TH0=0.73; TH1=0.21; fl=0.5; fh=1.5 TH0=r1; TH1=r2 L0=fl*TH0; H0=fh*TH0; L1=fl*TH1; H1=fh*TH1 Tc=0 for i in range(NX): for j in range(NY): X1=D*i;X2=D*(i+1) Y1=D*j;Y2=D*(j+1) cv2.rectangle(img2,(X1,Y1),(X2,Y2),(0, 255, 0), 1) cv2.rectangle(img1,(X1*F,Y1*F),(X2*F,Y2*F),(255,0,0), 2) cv2.rectangle(img,(X1*F,Y1*F),(X2*F,Y2*F),(255,0,0), 1) img3=img2[Y1:Y2,X1:X2,:] blue=0 for I in range(D): for J in range(D): #if(i==6 and j==3): print(I,J,img3[I][J]) c0=float(img3[I][J][0]); c1=float(img3[I][J][1]); c2=float(img3[I][J][2]); Tc=c0+c1+c2 if(Tc>200*3): continue if(Tc<100): continue if(c0>1 and L0 |
Fcolor.py 取得標的物的色碼
import numpy as np import cv2 from PARAM import * def Fcolor(): cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, Lx) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, Ly) XC=int(Lx/2); YC=int(Ly/2) t=0 while t < 4: ret,frame = cap.read(); t+=1 if(ret==True): img3=frame[YC:YC+10,XC:XC+10,:] a=np.arange(3) for n in range(3): a[n]=int(np.average(img3[:,:,n:n+1])) r1=round(float(a[1])/float(a[0]),2); r2=round(float(a[2])/float(a[0]),2); print(t,'focus:a=',a,r1,r2) cv2.circle(frame,(XC,YC), 10, (0, 155, 255), 2) cv2.imshow('frame',frame) cv2.waitKey(0) cv2.destroyAllWindows() cap.release() return a,r1,r2 |