Guest User

Untitled

a guest
Nov 7th, 2018
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.59 KB | None | 0 0
  1. import cv2
  2. import sys
  3. import numpy as np
  4. import pprint
  5.  
  6. np.set_printoptions(precision=3, threshold=np.inf, linewidth=np.inf, suppress=True)
  7.  
  8. def mode_filter(roi):
  9.     values = np.zeros((1, 256), dtype="uint8")
  10.  
  11.     for pos, val in np.ndenumerate(roi):
  12.         values[0, val] += 1
  13.  
  14.     print(values)
  15.     return int(np.argmax(values[0]))
  16.  
  17. class Gridder:
  18.  
  19.     def __init__(self):
  20.         self.cell_map = {}
  21.  
  22.     def get_roi(self, src, pt1, pt2):
  23.  
  24.         col1, col2 = (pt1[0], pt2[0]) if pt1[0] < pt2[0] else (pt2[0], pt1[0])
  25.         row1, row2 = (pt1[1], pt2[1]) if pt1[1] < pt2[1] else (pt2[1], pt1[1])
  26.         return src[row1:row2, col1:col2]
  27.  
  28.     def calc_roi_descriptor(self, roi):
  29.  
  30.         # mean, std_dev = cv2.meanStdDev(roi)
  31.         # return [mean[0][0], std_dev[0][0]]
  32.         return mode_filter(roi)
  33.  
  34.     def grid_img(self, src, nCols=7, nRows=7):
  35.  
  36.         gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
  37.         cells = np.zeros(gray.shape, dtype="uint8")
  38.         display_img = src
  39.         cell_w = int(gray.shape[1] / nCols)
  40.         cell_h = int(gray.shape[0] / nRows)
  41.  
  42.         for c in range(nCols):
  43.             cv2.line(display_img, (c*cell_w, 0), (c*cell_w, display_img.shape[0]), (0,255,0), 1)
  44.             cv2.line(display_img, (0, c*cell_h), (display_img.shape[1], c*cell_h), (0,255,0), 1)
  45.            
  46.             for r in range(nRows):
  47.                 roi = self.get_roi(gray, (c*cell_w, r*cell_h), ((c+1)*cell_w, (r+1)*cell_h))
  48.  
  49.                 self.cell_map[ (c,r) ] = self.calc_roi_descriptor(roi)
  50.                 cv2.rectangle(cells, (c*cell_w, r*cell_h), ((c+1)*cell_w, (r+1)*cell_h), (self.cell_map[ (c,r) ],), -1)
  51.  
  52.                 cv2.imshow('roi', roi)
  53.                 cv2.imshow('cells', cells)
  54.                 cv2.imshow('src', src)
  55.                 print('{}, {}'.format((c,r), self.cell_map[ (c,r) ]))
  56.                 cv2.waitKey(0)
  57.  
  58.         return [gray, display_img, cells]
  59.  
  60.     def connected_component_labelling(display_img, gray, nCols=7, nRows=7):
  61.  
  62.         label_index = 1
  63.  
  64.         for c in range(nCols):
  65.             for r in range(nRows):
  66.  
  67.                 cur = self.cell_map[ (c,r) ]
  68.                 left = self.cell_map[ (c-1, r) ]
  69.                 top = self.cell_map[ (c, r-1) ]
  70.  
  71.                 left_lbl = sys.maxint
  72.                 top_lbl = sys.maxint
  73.                 if left and len(left) > 2:
  74.                     left_lbl = left[2]
  75.                 if top and len(top) > 2:
  76.                     top_lbl = top[2]
  77.  
  78.                 lbl = left_lbl if left_lbl < top_lbl else top_lbl
  79.  
  80.                 if (lbl >= sys.maxint):
  81.                     lbl = label_index
  82.                     label_index += 1
  83.                
  84.                 cur.append(lbl)
  85.  
  86. def main():
  87.    
  88.     src = cv2.imread('../images/blob2.png')
  89.     print(src.shape)
  90.  
  91.     gridder = Gridder()
  92.     gray, display_img, cells = gridder.grid_img(src)
  93.  
  94.     pp = pprint.PrettyPrinter(indent=2)
  95.     pp.pprint(gridder.cell_map)
  96.  
  97.     cv2.imshow('display_img', display_img)
  98.     cv2.imshow('gray', gray)
  99.     cv2.imshow('cells', cells)
  100.     cv2.waitKey(0)
  101.  
  102. main()
Add Comment
Please, Sign In to add comment