Advertisement
Guest User

Untitled

a guest
Jan 29th, 2020
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.21 KB | None | 0 0
  1. from PIL import Image
  2. import numpy as np
  3. import cv2
  4. import cv2.aruco as aruco
  5. import matplotlib.pyplot as plt
  6. import PIL
  7. import pyglet
  8.  
  9.  
  10. window = pyglet.window.Window(1920, 1080)
  11.  
  12. def drawpoint(x, y, color, pic):
  13.     pic.putpixel((int(x), int(y)), color)
  14.     pic.putpixel((int(x)+1, int(y)-1), color)
  15.     pic.putpixel((int(x)-1, int(y)+1), color)
  16.     pic.putpixel((int(x)+1, int(y)+1), color)
  17.     pic.putpixel((int(x)-1, int(y)-1), color)
  18.     pic.putpixel((int(x)+1, int(y)), color)
  19.     pic.putpixel((int(x)-1, int(y)), color)
  20.     pic.putpixel((int(x), int(y)+1), color)
  21.     pic.putpixel((int(x), int(y)-1), color)
  22.  
  23.  
  24.  
  25.  
  26.  
  27. aruco_dict = aruco.custom_dictionary(0, 4, 1)
  28. aruco_dict.bytesList = np.empty(shape = (4, 2, 4), dtype = np.uint8)
  29. mybits = np.array([[1, 1, 1, 0], [1, 0, 0, 1], [0, 1, 0, 1], [1, 0, 1, 1]], dtype = np.uint8)
  30. mybits2 = np.array([[1, 1, 1, 1], [1, 0, 0, 1], [0, 1, 0, 1], [1, 0, 1, 0]], dtype = np.uint8)
  31. mybits3 = np.array([[0, 0, 1, 0], [0, 1, 0, 0], [0, 1, 1, 0], [1, 0, 1, 0]], dtype = np.uint8)
  32. mybits4 = np.array([[0, 0, 0, 0], [0, 1, 0, 0], [1, 1, 1, 1], [0, 0, 0, 1]], dtype = np.uint8)
  33.  
  34. aruco_dict.bytesList[0] = aruco.Dictionary_getByteListFromBits(mybits)
  35. #print(len(aruco_dict.bytesList))
  36. aruco_dict.bytesList[1] = aruco.Dictionary_getByteListFromBits(mybits2)
  37. aruco_dict.bytesList[2] = aruco.Dictionary_getByteListFromBits(mybits3)
  38. aruco_dict.bytesList[3] = aruco.Dictionary_getByteListFromBits(mybits4)
  39.  
  40.  
  41. threshold=100
  42. #img = cv2.imread('img.png', 0)
  43. img = None
  44. cap = cv2.VideoCapture(0)
  45.  
  46. while True:
  47.     ret, img = cap.read()
  48.     cv2.imshow("camera", img)
  49.     if cv2.waitKey(10) == 27: # Клавиша Esc
  50.         break
  51. cap.release()
  52. cv2.destroyAllWindows()
  53.  
  54. th2 = cv2.adaptiveThreshold(img, 1, cv2.ADAPTIVE_THRESH_MEAN_C,\
  55.             cv2.THRESH_BINARY, 11, 3)
  56.  
  57. ret,th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
  58.  
  59. kernel = np.ones((2, 3), np.uint8)
  60. opening = cv2.morphologyEx(th1, cv2.MORPH_OPEN, kernel)
  61. plt.imshow(opening)
  62.  
  63. parameters = aruco.DetectorParameters_create()
  64. corners, ids, rejectedImgPoints = aruco.detectMarkers(
  65.     opening, aruco_dict, parameters=parameters)
  66.  
  67. #print(corners, ids, rejectedImgPoints)
  68. print(corners)
  69.  
  70. pic = Image.new("RGB", (1500, 1500), (255, 255, 255))
  71.  
  72. minimal = [99999999, 99999999, 9999999, 9999999]
  73. minp = [0, 0, 0, 0]
  74. sax = [0, 0, 0, 0, 0]
  75. say = [0, 0, 0, 0, 0]
  76. for i in range(0, 4):
  77.     sx = 0
  78.     sy = 0
  79.     for j in range(0, 4):
  80.         sx += corners[i][0][j][0]
  81.         sy += corners[i][0][j][1]
  82.     sx /= 4
  83.     sy /= 4
  84.     sax[i] = sx
  85.     say[i] = sy
  86.  
  87.  
  88. srx = 0
  89. sry = 0
  90.  
  91. for i in range(0, 4):
  92.     drawpoint(sax[i], say[i], (0, 255, 0), pic)
  93.     srx += sax[i]
  94.     sry += say[i]    
  95.    
  96. srx /= 4
  97. sry /= 4
  98. drawpoint(srx, sry, (0, 255, 0), pic)
  99.  
  100. for i in range(0, 4):
  101.     for j in range(0, 4):
  102.         drawpoint(corners[i][0][j][0], corners[i][0][j][1], (255, 0, 0), pic)
  103.  
  104. for i in range(0, 4):
  105.     for j in range(0, 4):
  106.         dist = ((corners[i][0][j][0] - srx)**2 + (corners[i][0][j][1] - sry)**2)
  107.         if dist < minimal[i]:
  108.             minimal[i] = dist
  109.             minp[i] = j
  110.            
  111. for i in range(0, 4):
  112.     drawpoint(corners[i][0][minp[i]][0], corners[i][0][minp[i]][1], (0, 0, 255), pic)
  113.    
  114.    
  115.    
  116. # Enable blending
  117. pyglet.gl.glEnable(pyglet.gl.GL_BLEND)
  118. pyglet.gl.glBlendFunc(pyglet.gl.GL_SRC_ALPHA, pyglet.gl.GL_ONE_MINUS_SRC_ALPHA)
  119.  
  120. # Enable transparency
  121. pyglet.gl.glEnable(pyglet.gl.GL_ALPHA_TEST)
  122. pyglet.gl.glAlphaFunc(pyglet.gl.GL_GREATER, .1)
  123.  
  124. x1 = srx
  125. x2 = srx
  126. x3 = srx
  127. x0 = srx
  128. y1 = sry
  129. y2 = sry
  130. y3 = sry
  131. y0 = sry
  132.  
  133. @window.event
  134. def on_draw():
  135.     global x1, x2, x3, x0, y1, y2, y3, y0
  136.     window.clear()
  137.  
  138.     pyglet.gl.glColor4f(0.5, 1.0, 0.2, 0.5)
  139.  
  140.     pyglet.gl.glBegin(pyglet.gl.GL_QUADS)
  141.     pyglet.gl.glVertex3f(x0, y0, 0)
  142.     pyglet.gl.glVertex3f(x1, y1, 0)
  143.     pyglet.gl.glVertex3f(x3, y3, 0)
  144.     pyglet.gl.glVertex3f(x2, y2, 0)
  145.  
  146.     pyglet.gl.glEnd()
  147.  
  148. def update(dt):
  149.     global x1, x2, x3, x0, y1, y2, y3, y0
  150.     x0 -=1
  151.     y0 -=1
  152.     x1 -=1
  153.     y1 +=1
  154.     x3 +=1
  155.     y3 +=1
  156.     x2 +=1
  157.     y2 -=1
  158.     on_draw()
  159.  
  160. pyglet.clock.schedule_interval(update, 1 / 50.0)
  161. pyglet.app.run()
  162. pyglet.clock.unschedule(update)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement