Skip to content

Instantly share code, notes, and snippets.

@jediofgever
Created June 4, 2020 13:11
Show Gist options
  • Save jediofgever/ae2a9deef59cfa20d6bfe91b18ff05d6 to your computer and use it in GitHub Desktop.
Save jediofgever/ae2a9deef59cfa20d6bfe91b18ff05d6 to your computer and use it in GitHub Desktop.
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