Created
June 4, 2020 13:11
-
-
Save jediofgever/ae2a9deef59cfa20d6bfe91b18ff05d6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import cv #bazı cv fonksiyonları lazım karşılığı olan cv2 fonksiyonlarını bilmediğimden | |
import cv2 | |
global imghsv | |
import numpy | |
import serial | |
import binascii | |
import imutils | |
def getthresholdedimg(im): # etiketi rengi sayesinde algılayan fonksiyon() | |
global imghsv | |
imghsv=cv.CreateImage(cv.GetSize(im),8,3) | |
cv.CvtColor(im,imghsv,cv.CV_BGR2HSV) # RGB to HSV | |
imggreen=cv.CreateImage(cv.GetSize(im),8,1) | |
imgblue=cv.CreateImage(cv.GetSize(im),8,1) | |
imgthreshold=cv.CreateImage(cv.GetSize(im),8,1) | |
###define color range for marking filters | |
cv.InRangeS(imghsv,cv.Scalar(29,86,6),cv.Scalar(64, 255, 255),imggreen) # bu aralıktaki rengi yakala ve ve fotografa yaz | |
cv.InRangeS(imghsv,cv.Scalar(0,200,0),cv.Scalar(19,255,255),imgblue) # bu aralıktaki rengi yakala ve ve fotografa yaz | |
cv.Add(imggreen,imgblue,imgthreshold) | |
return imgthreshold | |
###ön kameradan foto yakala | |
capture=cv.CaptureFromCAM(1) | |
frame = cv.QueryFrame(capture) | |
###yan kameradan foto yakala | |
capture_side=cv.CaptureFromCAM(2) | |
frame_side=cv.QueryFrame(capture_side) | |
###ön kamera görüntüsü için sanal foto yarat | |
frame_size = cv.GetSize(frame) | |
test=cv.CreateImage(cv.GetSize(frame),8,3) | |
img2=cv.CreateImage(cv.GetSize(frame),8,3) | |
cv.NamedWindow("Real",0) | |
cv.NamedWindow("Threshold",0) | |
cv.NamedWindow("final",0) | |
#### yan kamera görüntüsü için sanal foto yarat | |
frame_side_size=cv.GetSize(frame_side) | |
test_side=cv.CreateImage(cv.GetSize(frame_side),8,3) | |
img2_side=cv.CreateImage(cv.GetSize(frame_side),8,3) | |
cv.NamedWindow("Real_Side",0) | |
cv.NamedWindow("Threshold_Side",0) | |
cv.NamedWindow("Final_Side",0) | |
flag_green = False | |
flag_red = False | |
def column(matrix, i): #matrix elemanını tarayan fonksiyon | |
return [row[i] for row in matrix] | |
blue=[] | |
green=[] | |
while(1): # ön kameradan alınan görüntü üzerinde bir takım pixel belirginleştirme ve etiketin kenarlarını (contour fonksiyonu ile) bir matrix içinde saklama işlemi | |
color_image = cv.QueryFrame(capture) | |
imdraw=cv.CreateImage(cv.GetSize(frame),8,3) | |
cv.SetZero(imdraw) | |
cv.Smooth(color_image, color_image, cv.CV_GAUSSIAN, 3, 0) | |
imggreenthresh=getthresholdedimg(color_image) | |
imgbluethresh=getthresholdedimg(color_image) | |
cv.Erode(imggreenthresh,imggreenthresh,None,3) | |
cv.Dilate(imggreenthresh,imggreenthresh,None,10) | |
cv.Erode(imgbluethresh,imgbluethresh,None,3) | |
cv.Dilate(imgbluethresh,imgbluethresh,None,10) | |
img2=cv.CloneImage(imggreenthresh) | |
img2=cv.CloneImage(imgbluethresh) | |
storage = cv.CreateMemStorage(0) | |
contour = cv.FindContours(imggreenthresh, storage, cv.CV_RETR_CCOMP, cv.CV_CHAIN_APPROX_SIMPLE) | |
contour = cv.FindContours(imgbluethresh,storage,cv.CV_RETR_CCOMP,cv.CV_CHAIN_APPROX_SIMPLE) | |
points = [] | |
#################################################################################################### | |
#################################################################################################### | |
# yan kameradan alınan görüntü üzerinde bir takım pixel belirginleştirme ve etiketin kenarlarını (contour fonksiyonu ile) bir matrix içinde saklama işlemi | |
color_image_side=cv.QueryFrame(capture_side) | |
imdraw_side=cv.CreateImage(cv.GetSize(frame_side),8,3) | |
cv.SetZero(imdraw_side) | |
cv.Smooth(color_image_side,color_image_side,cv.CV_GAUSSIAN,3,0) | |
imggreenthresh=getthresholdedimg(color_image_side) | |
imgbluethresh=getthresholdedimg(color_image_side) | |
cv.Erode(imggreenthresh,imggreenthresh,None,3) | |
cv.Dilate(imggreenthresh,imggreenthresh,None,10) | |
cv.Erode(imgbluethresh,imgbluethresh,None,3) | |
cv.Dilate(imgbluethresh,imgbluethresh,None,10) | |
img2_side=cv.CloneImage(imggreenthresh) | |
img2_side=cv.CloneImage(imgbluethresh) | |
storage_side = cv.CreateMemStorage(0) | |
contour_side= cv.FindContours() | |
while contour: | |
# kenar çizgilerini çizdirme işlemi | |
# DIKKAT BU ISLEMIN AYNISININ YAN KAMERA ICINDE YAPILMASI GEREKMEKTE | |
bound_rect = cv.BoundingRect(list(contour)) | |
contour = contour.h_next() | |
pt1 = (bound_rect[0], bound_rect[1]) | |
pt2 = (bound_rect[0] + bound_rect[2], bound_rect[1] + bound_rect[3]) | |
points.append(pt1) | |
points.append(pt2) | |
cv.Rectangle(color_image, pt1, pt2, cv.CV_RGB(255,0,0), 1) | |
centroidx=cv.Round((pt1[0]+pt2[0])/2) | |
centroidy=cv.Round((pt1[1]+pt2[1])/2) | |
if (29<cv.Get2D(imghsv,centroidy,centroidx)[0]<64): | |
green.append((centroidx,centroidy)) | |
position = (int(green[0][0])+32) | |
elif (0<cv.Get2D(imghsv,centroidy,centroidx)[0]<19): | |
blue.append((centroidx,centroidy)) | |
position = (int(blue[0][0])-32) | |
# | |
try: | |
cv.Circle(imdraw,green[1],10,(0,255,255)) | |
cv.Line(imdraw,green[0],green[1],(0,255,255),3,8,0) | |
green.pop(0) | |
#print format(int(green[0][0])) | |
#print [i+j for i,j in zip(blue[0],green[0])][0] | |
# print int(''.join(map(str, green[0])))*1/1000 | |
except IndexError: | |
flag_red = True | |
print "Just wait for green" | |
try: | |
cv.Circle(imdraw,blue[1],10,(0,0,255)) | |
cv.Line(imdraw,blue[0],blue[1],(0,0,255),3,8,0) | |
blue.pop(0) | |
# print ''.join(map(str, blue[(1)])) | |
except IndexError: | |
flag_green = True | |
print "Just wait for red" | |
cv.Add(test,imdraw,test) | |
if(flag_red ==False and flag_green == False): | |
position = (int(green[0][0])+32) | |
elif(flag_red ==True and flag_green == False): | |
position = (int(green[0][0])+32) | |
elif(flag_red ==False and flag_green == True): | |
position = (int(blue[0][0])-32) | |
# DIKKAT BU ISLEMIN AYNISININ YAN KAMERA ICINDE YAPILMASI GEREKMEKTE | |
try: | |
ComPort = serial.Serial('/dev/ttyUSB0') # open ttyUSB0 | |
ComPort.baudrate = 115200 # set Baud rate | |
ComPort.bytesize = 8 # Number of data bits = 8 | |
ComPort.parity = 'N' # No parity | |
ComPort.stopbits = 1 # Number of Stop bits = 1 | |
position_mm=0.0110*(position)*(position)-1.5179*position+129.3766#pozisyonu pixelden referans noktasına olan uzaklığa çeviren func. | |
position_center=position_mm-120 # bir önceki tam kenarın pozisyonunu vermekte merkez için 120 mm çıkarılmalı | |
No = ComPort.write(str(float(position_center)*100)) # mm ve string cinsinden olan pozisyon bilgisi porta yazılır (SADECE ON KAMERA) | |
ComPort.close() #Close the Serial port | |
except IndexError: | |
print "failed to send data" | |
cv.ShowImage("Real",color_image) #ön kamera gerçek görüntü | |
cv.ShowImage("Threshold",img2) #ön kamera etiketin filrelendiği görüntü | |
cv.ShowImage("final",test) # ön kamera için nihayetinden çizdirilen görüntü | |
key = cv2.waitKey(1) & 0xFF | |
if key == ord("q"): | |
cv.DestroyWindow("Real") | |
cv.DestroyWindow("Threshold") | |
cv.DestroyWindow("final") | |
break |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment