interactiveColorSegment.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. import cv2,time,argparse,glob
  2. import numpy as np
  3. #global variable to keep track of
  4. show = False
  5. def onTrackbarActivity(x):
  6. global show
  7. show = True
  8. pass
  9. if __name__ == '__main__' :
  10. # Get the filename from the command line
  11. files = glob.glob('images/rub*.jpg')
  12. files.sort()
  13. # load the image
  14. original = cv2.imread(files[0])
  15. #Resize the image
  16. rsize = 250
  17. original = cv2.resize(original,(rsize,rsize))
  18. #position on the screen where the windows start
  19. initialX = 50
  20. initialY = 50
  21. #creating windows to display images
  22. cv2.namedWindow('P-> Previous, N-> Next',cv2.WINDOW_AUTOSIZE)
  23. cv2.namedWindow('SelectBGR',cv2.WINDOW_AUTOSIZE)
  24. cv2.namedWindow('SelectHSV',cv2.WINDOW_AUTOSIZE)
  25. cv2.namedWindow('SelectYCB',cv2.WINDOW_AUTOSIZE)
  26. cv2.namedWindow('SelectLAB',cv2.WINDOW_AUTOSIZE)
  27. #moving the windows to stack them horizontally
  28. cv2.moveWindow('P-> Previous, N-> Next',initialX,initialY)
  29. cv2.moveWindow('SelectBGR',initialX + (rsize + 5),initialY)
  30. cv2.moveWindow('SelectHSV',initialX + 2*(rsize + 5),initialY)
  31. cv2.moveWindow('SelectYCB',initialX + 3*(rsize + 5),initialY)
  32. cv2.moveWindow('SelectLAB',initialX + 4*(rsize + 5),initialY)
  33. #creating trackbars to get values for YCrCb
  34. cv2.createTrackbar('CrMin','SelectYCB',0,255,onTrackbarActivity)
  35. cv2.createTrackbar('CrMax','SelectYCB',0,255,onTrackbarActivity)
  36. cv2.createTrackbar('CbMin','SelectYCB',0,255,onTrackbarActivity)
  37. cv2.createTrackbar('CbMax','SelectYCB',0,255,onTrackbarActivity)
  38. cv2.createTrackbar('YMin','SelectYCB',0,255,onTrackbarActivity)
  39. cv2.createTrackbar('YMax','SelectYCB',0,255,onTrackbarActivity)
  40. #creating trackbars to get values for HSV
  41. cv2.createTrackbar('HMin','SelectHSV',0,180,onTrackbarActivity)
  42. cv2.createTrackbar('HMax','SelectHSV',0,180,onTrackbarActivity)
  43. cv2.createTrackbar('SMin','SelectHSV',0,255,onTrackbarActivity)
  44. cv2.createTrackbar('SMax','SelectHSV',0,255,onTrackbarActivity)
  45. cv2.createTrackbar('VMin','SelectHSV',0,255,onTrackbarActivity)
  46. cv2.createTrackbar('VMax','SelectHSV',0,255,onTrackbarActivity)
  47. #creating trackbars to get values for BGR
  48. cv2.createTrackbar('BGRBMin','SelectBGR',0,255,onTrackbarActivity)
  49. cv2.createTrackbar('BGRBMax','SelectBGR',0,255,onTrackbarActivity)
  50. cv2.createTrackbar('BGRGMin','SelectBGR',0,255,onTrackbarActivity)
  51. cv2.createTrackbar('BGRGMax','SelectBGR',0,255,onTrackbarActivity)
  52. cv2.createTrackbar('BGRRMin','SelectBGR',0,255,onTrackbarActivity)
  53. cv2.createTrackbar('BGRRMax','SelectBGR',0,255,onTrackbarActivity)
  54. #creating trackbars to get values for LAB
  55. cv2.createTrackbar('LABLMin','SelectLAB',0,255,onTrackbarActivity)
  56. cv2.createTrackbar('LABLMax','SelectLAB',0,255,onTrackbarActivity)
  57. cv2.createTrackbar('LABAMin','SelectLAB',0,255,onTrackbarActivity)
  58. cv2.createTrackbar('LABAMax','SelectLAB',0,255,onTrackbarActivity)
  59. cv2.createTrackbar('LABBMin','SelectLAB',0,255,onTrackbarActivity)
  60. cv2.createTrackbar('LABBMax','SelectLAB',0,255,onTrackbarActivity)
  61. # show all images initially
  62. cv2.imshow('SelectHSV',original)
  63. cv2.imshow('SelectYCB',original)
  64. cv2.imshow('SelectLAB',original)
  65. cv2.imshow('SelectBGR',original)
  66. i = 0
  67. while(1):
  68. cv2.imshow('P-> Previous, N-> Next',original)
  69. k = cv2.waitKey(1) & 0xFF
  70. # check next image in folder
  71. if k == ord('n'):
  72. i += 1
  73. original = cv2.imread(files[i%len(files)])
  74. original = cv2.resize(original,(rsize,rsize))
  75. show = True
  76. # check previous image in folder
  77. elif k == ord('p'):
  78. i -= 1
  79. original = cv2.imread(files[i%len(files)])
  80. original = cv2.resize(original,(rsize,rsize))
  81. show = True
  82. # Close all windows when 'esc' key is pressed
  83. elif k == 27:
  84. break
  85. if show: # If there is any event on the trackbar
  86. show = False
  87. # Get values from the BGR trackbar
  88. BMin = cv2.getTrackbarPos('BGRBMin','SelectBGR')
  89. GMin = cv2.getTrackbarPos('BGRGMin','SelectBGR')
  90. RMin = cv2.getTrackbarPos('BGRRMin','SelectBGR')
  91. BMax = cv2.getTrackbarPos('BGRBMax','SelectBGR')
  92. GMax = cv2.getTrackbarPos('BGRGMax','SelectBGR')
  93. RMax = cv2.getTrackbarPos('BGRRMax','SelectBGR')
  94. minBGR = np.array([BMin, GMin, RMin])
  95. maxBGR = np.array([BMax, GMax, RMax])
  96. # Get values from the HSV trackbar
  97. HMin = cv2.getTrackbarPos('HMin','SelectHSV')
  98. SMin = cv2.getTrackbarPos('SMin','SelectHSV')
  99. VMin = cv2.getTrackbarPos('VMin','SelectHSV')
  100. HMax = cv2.getTrackbarPos('HMax','SelectHSV')
  101. SMax = cv2.getTrackbarPos('SMax','SelectHSV')
  102. VMax = cv2.getTrackbarPos('VMax','SelectHSV')
  103. minHSV = np.array([HMin, SMin, VMin])
  104. maxHSV = np.array([HMax, SMax, VMax])
  105. # Get values from the LAB trackbar
  106. LMin = cv2.getTrackbarPos('LABLMin','SelectLAB')
  107. AMin = cv2.getTrackbarPos('LABAMin','SelectLAB')
  108. BMin = cv2.getTrackbarPos('LABBMin','SelectLAB')
  109. LMax = cv2.getTrackbarPos('LABLMax','SelectLAB')
  110. AMax = cv2.getTrackbarPos('LABAMax','SelectLAB')
  111. BMax = cv2.getTrackbarPos('LABBMax','SelectLAB')
  112. minLAB = np.array([LMin, AMin, BMin])
  113. maxLAB = np.array([LMax, AMax, BMax])
  114. # Get values from the YCrCb trackbar
  115. YMin = cv2.getTrackbarPos('YMin','SelectYCB')
  116. CrMin = cv2.getTrackbarPos('CrMin','SelectYCB')
  117. CbMin = cv2.getTrackbarPos('CbMin','SelectYCB')
  118. YMax = cv2.getTrackbarPos('YMax','SelectYCB')
  119. CrMax = cv2.getTrackbarPos('CrMax','SelectYCB')
  120. CbMax = cv2.getTrackbarPos('CbMax','SelectYCB')
  121. minYCB = np.array([YMin, CrMin, CbMin])
  122. maxYCB = np.array([YMax, CrMax, CbMax])
  123. # Convert the BGR image to other color spaces
  124. imageBGR = np.copy(original)
  125. imageHSV = cv2.cvtColor(original,cv2.COLOR_BGR2HSV)
  126. imageYCB = cv2.cvtColor(original,cv2.COLOR_BGR2YCrCb)
  127. imageLAB = cv2.cvtColor(original,cv2.COLOR_BGR2LAB)
  128. # Create the mask using the min and max values obtained from trackbar and apply bitwise and operation to get the results
  129. maskBGR = cv2.inRange(imageBGR,minBGR,maxBGR)
  130. resultBGR = cv2.bitwise_and(original, original, mask = maskBGR)
  131. maskHSV = cv2.inRange(imageHSV,minHSV,maxHSV)
  132. resultHSV = cv2.bitwise_and(original, original, mask = maskHSV)
  133. maskYCB = cv2.inRange(imageYCB,minYCB,maxYCB)
  134. resultYCB = cv2.bitwise_and(original, original, mask = maskYCB)
  135. maskLAB = cv2.inRange(imageLAB,minLAB,maxLAB)
  136. resultLAB = cv2.bitwise_and(original, original, mask = maskLAB)
  137. # Show the results
  138. cv2.imshow('SelectBGR',resultBGR)
  139. cv2.imshow('SelectYCB',resultYCB)
  140. cv2.imshow('SelectLAB',resultLAB)
  141. cv2.imshow('SelectHSV',resultHSV)
  142. cv2.destroyAllWindows()