Blame view

Python/Application/ShapeDetection.py 2.28 KB
81de032f   Justine   Ajout de l'applic...
1
2
3
  import cv2
  import numpy as np
  import Contour
3f217332   Justine   mise à jour du git
4
  import sys
81de032f   Justine   Ajout de l'applic...
5
  
81de032f   Justine   Ajout de l'applic...
6
7
8
9
10
11
12
  
  #Test : Luminosite, orientation dans l'espace, distance
  #Etudier les limites
  
  def FindCircles():
  	image = None
  	while (image is None):
3f217332   Justine   mise à jour du git
13
14
15
16
  		if sys.version_info >= (3, 0):
  			image = str(input('\tImage to use ? By default couleur.png \n'))
  		else:
  			image = str(raw_input('\tImage to use ? By default couleur.png \n'))
81de032f   Justine   Ajout de l'applic...
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
  		if not image:
  			image = 'couleur.png'
  		image = cv2.imread(str(image), 0)
  	img = cv2.medianBlur(image, 5)
  	cimg = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
  	circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 20, param1 = 50, param2 = 30, minRadius = 0, maxRadius = 0)
  	circles = np.uint16(np.around(circles))
  	for i in circles[0,:]:
  		cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
  		cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
  	
  	cv2.imshow('detected circles',cimg)
  	cv2.waitKey(0)
  	cv2.destroyAllWindows()
  	return
  
  def FindShapes():
  	image = None
  	while (image is None):
3f217332   Justine   mise à jour du git
36
37
38
39
  		if sys.version_info >= (3, 0):
  			image = str(input('\tImage to use ? By default couleur.png \n'))
  		else:
  			image = str(raw_input('\tImage to use ? By default couleur.png \n'))
81de032f   Justine   Ajout de l'applic...
40
41
42
43
44
45
46
47
48
49
50
  		if not image:
  			image = 'couleur.png'
  		image = cv2.imread(str(image))
  	height, width, channels = image.shape
  	mask = np.zeros((height, width, 3), dtype = "uint8")
  	contours = Contour.FindContours(image)
  	img = image.copy()
  	#Contour.DrawContours(img, contours, "Contours Shape Detection")
  	for cnt in contours:
  		approx = cv2.approxPolyDP(cnt, 0.01*cv2.arcLength(cnt, True), True)
  		if len(approx) == 3 :
3f217332   Justine   mise à jour du git
51
  			print ("Triangle")
81de032f   Justine   Ajout de l'applic...
52
53
  			cv2.drawContours(image, [cnt], 0, (255, 255, 0), -1)
  		elif len(approx) == 4:
3f217332   Justine   mise à jour du git
54
  			print ("Square")
81de032f   Justine   Ajout de l'applic...
55
56
  			cv2.drawContours(image, [cnt], 0, (255, 255, 255), -1)
  		elif len(approx) == 5:
3f217332   Justine   mise à jour du git
57
  			print ("Pentagon")
81de032f   Justine   Ajout de l'applic...
58
59
60
61
62
  			cv2.drawContours(image, [cnt], 0, (0, 255, 0), -1)
  		#elif len(approx) == 8:
  		#	print "Huit"
  		#	cv2.drawContours(image, [cnt], 0, (0, 0, 0), -1)
  		elif len(approx) > 6 and len(approx) < 9:
3f217332   Justine   mise à jour du git
63
  			print ("Arrow")
81de032f   Justine   Ajout de l'applic...
64
65
66
  			cv2.drawContours(image, [cnt], 0, (255, 0, 255), -1)
  			cv2.drawContours(mask, [cnt], 0, (255,255,255), -1)
  		elif len(approx) > 19:
3f217332   Justine   mise à jour du git
67
  			print ("Circle")
81de032f   Justine   Ajout de l'applic...
68
69
70
  			cv2.drawContours(image, [cnt], 0, (255, 0, 0), -1)
  	cv2.imshow('Mask', mask)
  	cv2.imshow('detected shapes', image)
3f217332   Justine   mise à jour du git
71
  	cv2.imwrite('AllArrows.png', image)
81de032f   Justine   Ajout de l'applic...
72
73
74
  	cv2.waitKey(0)
  	cv2.destroyAllWindows()
  	return