├── Readme.md ├── crop-cells ├── Readme.md ├── cropped │ ├── 0.jpg │ ├── 1.jpg │ ├── 10.jpg │ ├── 11.jpg │ ├── 12.jpg │ ├── 13.jpg │ ├── 14.jpg │ ├── 15.jpg │ ├── 16.jpg │ ├── 17.jpg │ ├── 18.jpg │ ├── 19.jpg │ ├── 2.jpg │ ├── 20.jpg │ ├── 21.jpg │ ├── 22.jpg │ ├── 23.jpg │ ├── 24.jpg │ ├── 25.jpg │ ├── 26.jpg │ ├── 27.jpg │ ├── 28.jpg │ ├── 3.jpg │ ├── 4.jpg │ ├── 5.jpg │ ├── 6.jpg │ ├── 7.jpg │ ├── 8.jpg │ └── 9.jpg ├── extract_cells.py ├── input1.jpg └── input2.png ├── crop_boxes.py ├── cropped ├── 1.png ├── 10.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png ├── 8.png └── 9.png ├── inter_processing ├── Image_bin.jpg ├── horizontal_lines.jpg ├── img_final_bin.jpg └── verticle_lines.jpg └── sample_image.jpg /Readme.md: -------------------------------------------------------------------------------- 1 | #### Crop Cells From Tables 2 | 3 | Hello Folks! this project is based on OpenCV and Python with the following codes you can automatically crop out Cells / Boxes from image of data tables. 4 | 5 | It automatically recognizes horizontal and Vertical lines from images 6 | and Crop Boxes i.e, ( Cells of the given Table in our case). 7 | 8 | >simply Run the "crop_boxes.py" and it will crop out each boxes line by line for you cropped out images will be stored in "cropped" directory. 9 | 10 | #### Required Modules 11 | 12 | `````python 13 | >> pip install opencv-contrib-python 14 | >> pip install numpy 15 | ````` 16 | 17 | #### Illustrations 18 | 19 | > Input Image: ``sample_image.jpg`` 20 | > 21 | > ![](sample_image.jpg) 22 | 23 | 24 | 25 | > Detecting Vertical Lines 26 | > 27 | > ![](inter_processing/verticle_lines.jpg) 28 | > 29 | > Detecting Horizontal Lines 30 | > 31 | > ![](inter_processing/horizontal_lines.jpg) 32 | > 33 | > Combined Mask 34 | > 35 | > ![](inter_processing/img_final_bin.jpg) 36 | > 37 | > Final Detected Table 38 | > 39 | > ![](inter_processing/Image_bin.jpg) 40 | 41 | 42 | 43 | #### Output 44 | 45 | > All the cropped Boxes / Cells are stored in ``cropped`` Directory 46 | > 47 | > ![](cropped/1.png) 48 | > 49 | > ![](cropped/2.png) 50 | > 51 | > ![](cropped/3.png) 52 | > 53 | > ![](cropped/4.png) 54 | > 55 | > ![](cropped/5.png) 56 | > 57 | > ![](cropped/6.png) 58 | > 59 | > ![](cropped/7.png) 60 | > 61 | > ![](cropped/8.png) 62 | > 63 | > ![](cropped/9.png) 64 | > 65 | > ![](cropped/10.png) 66 | 67 | -------------------------------------------------------------------------------- /crop-cells/Readme.md: -------------------------------------------------------------------------------- 1 | ## Cell Extractor 2 | 3 | This is a solution to one of the [**issues**](https://github.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/issues/1) raise by github user [**@shinnobi**](https://github.com/shinnobi) who wanted to extract all the cells from a table. 4 | 5 | Using the same technique with a little bit of modification, it can be achieved, since the cells are being cropped so it will be difficult to keep track of which cropped cell belongs to which position so for the convenience I saved the first image as a mapping for other cropped cells. 6 | 7 | **Input Image** 8 | 9 | ![](input1.jpg) 10 | 11 | **Output** 12 | 13 | ![](cropped/0.jpg) 14 | 15 | cropped cells are stored inside ``cropped`` directory. 16 | 17 | -------------------------------------------------------------------------------- /crop-cells/cropped/0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/0.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/1.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/10.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/11.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/12.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/13.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/14.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/15.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/16.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/17.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/18.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/19.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/2.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/20.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/21.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/22.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/23.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/24.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/25.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/26.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/26.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/27.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/27.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/28.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/28.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/3.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/4.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/5.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/6.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/7.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/8.jpg -------------------------------------------------------------------------------- /crop-cells/cropped/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/cropped/9.jpg -------------------------------------------------------------------------------- /crop-cells/extract_cells.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | import imutils 3 | from imutils import contours as cont 4 | import numpy as np 5 | 6 | def imshow(title, image, width=800): 7 | cv2.imshow(title, imutils.resize(image, width=width)) 8 | cv2.waitKey(0) 9 | 10 | 11 | def threshold(image, invert=False): 12 | if len(image.shape) == 3: 13 | image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 14 | 15 | #Thresholding the image 16 | thresh, img_bin = cv2.threshold(image, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU) 17 | # Invert the image 18 | if invert: img_bin = 255-img_bin 19 | return img_bin 20 | 21 | def morph(img_bin, kernel, iterations=3): 22 | img_temp = cv2.erode(img_bin, kernel, iterations=iterations) 23 | img_lines = cv2.dilate(img_temp, kernel, iterations=iterations) 24 | return img_lines 25 | 26 | def find_boxes(image): 27 | #convert binary image 28 | img_bin = threshold(image, invert=True) 29 | 30 | # Defining a kernel length 31 | kernel_length = np.array(img_bin).shape[1]//40 32 | 33 | # A verticle kernel of (1 X kernel_length), to detect all the verticle lines. 34 | verticle_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, kernel_length)) 35 | # A horizontal kernel of (kernel_length X 1), to detect all the horizontal lines. 36 | horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (kernel_length, 1)) 37 | 38 | verticle_lines = morph(img_bin, verticle_kernel) 39 | horizontal_lines = morph(img_bin, horizontal_kernel) 40 | boxes = cv2.add(verticle_lines, horizontal_lines) 41 | 42 | return boxes 43 | 44 | def over_draw_boxes(img_bin): 45 | minLineLength=100 46 | lines = cv2.HoughLinesP(image=img_bin,rho=1,theta=np.pi/180, threshold=100,lines=np.array([]), minLineLength=minLineLength,maxLineGap=80) 47 | for i in range(lines.shape[0]): 48 | cv2.line(img_bin, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (255, 255, 255), 2, cv2.LINE_AA) 49 | 50 | return img_bin 51 | 52 | 53 | 54 | img = cv2.imread("input1.jpg") 55 | #img = cv2.imread("input2.png") 56 | 57 | #resizing image 58 | img = imutils.resize(img, width=2564) 59 | img_original = img.copy() 60 | 61 | boxes = find_boxes(img) 62 | boxes = over_draw_boxes(boxes) 63 | 64 | 65 | contours, _ = cv2.findContours(boxes, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 66 | #_, contours, _ = cv2.findContours(boxes, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 67 | 68 | (contours, boundingBoxes) = cont.sort_contours(contours, method="left-to-right") 69 | (contours, boundingBoxes) = cont.sort_contours(contours, method="top-to-bottom") 70 | 71 | idx = 0 72 | for cnt in contours: 73 | x, y, w, h = cv2.boundingRect(cnt) 74 | 75 | if (w > 30 and h > 20) and w > 1*h: 76 | #rectangular contours 77 | rect = cv2.minAreaRect(cnt) 78 | box = cv2.boxPoints(rect) 79 | box = np.int0(box) 80 | img = cv2.drawContours(img, [box], 0, (0,0,255), 3) 81 | 82 | 83 | #cell mappings 84 | M = cv2.moments(cnt) 85 | cx = int(M['m10']/M['m00']) 86 | cy = int(M['m01']/M['m00']) 87 | center = (cx, cy+20) 88 | if idx!=0: 89 | cv2.putText(img, str(idx), center, cv2.FONT_HERSHEY_SIMPLEX, 2, (0,255,0), 3) 90 | cv2.imwrite("cropped/0.jpg", img) 91 | 92 | #cropped cell 93 | cell = img_original[y:y+h, x:x+w] 94 | cv2.imwrite("cropped/"+str(idx)+".jpg", cell) 95 | 96 | imshow("image", img) 97 | idx+=1 98 | -------------------------------------------------------------------------------- /crop-cells/input1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/input1.jpg -------------------------------------------------------------------------------- /crop-cells/input2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/crop-cells/input2.png -------------------------------------------------------------------------------- /crop_boxes.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | import numpy as np 3 | 4 | #======================= sort_contours =========================================== 5 | def sort_contours(cnts, method="left-to-right"): 6 | # initialize the reverse flag and sort index 7 | reverse = False 8 | i = 0 9 | 10 | # handle if we need to sort in reverse 11 | if method == "right-to-left" or method == "bottom-to-top": 12 | reverse = True 13 | 14 | # handle if we are sorting against the y-coordinate rather than 15 | # the x-coordinate of the bounding box 16 | if method == "top-to-bottom" or method == "bottom-to-top": 17 | i = 1 18 | 19 | # construct the list of bounding boxes and sort them from top to 20 | # bottom 21 | boundingBoxes = [cv2.boundingRect(c) for c in cnts] 22 | (cnts, boundingBoxes) = zip(*sorted(zip(cnts, boundingBoxes), 23 | key=lambda b:b[1][i], reverse=reverse)) 24 | 25 | # return the list of sorted contours and bounding boxes 26 | return (cnts, boundingBoxes) 27 | #================================================================================== 28 | 29 | 30 | def box_extraction(img_for_box_extraction_path, cropped_dir_path): 31 | img = cv2.imread(img_for_box_extraction_path, 0)# Read the image 32 | (thresh, img_bin) = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)#Thresholding the image 33 | img_bin = 255-img_bin# Invert the image 34 | cv2.imwrite("inter_processing/Image_bin.jpg",img_bin) 35 | 36 | # Defining a kernel length 37 | kernel_length = np.array(img).shape[1]//40 38 | 39 | # A verticle kernel of (1 X kernel_length), which will detect all the verticle lines from the image. 40 | verticle_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, kernel_length)) 41 | 42 | # A horizontal kernel of (kernel_length X 1), which will help to detect all the horizontal line from the image. 43 | hori_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (kernel_length, 1)) 44 | 45 | # A kernel of (3 X 3) ones. 46 | kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) 47 | 48 | # Morphological operation to detect verticle lines from an image 49 | img_temp1 = cv2.erode(img_bin, verticle_kernel, iterations=3) 50 | verticle_lines_img = cv2.dilate(img_temp1, verticle_kernel, iterations=3) 51 | cv2.imwrite("inter_processing/verticle_lines.jpg",verticle_lines_img) 52 | 53 | # Morphological operation to detect horizontal lines from an image 54 | img_temp2 = cv2.erode(img_bin, hori_kernel, iterations=3) 55 | horizontal_lines_img = cv2.dilate(img_temp2, hori_kernel, iterations=3) 56 | cv2.imwrite("inter_processing/horizontal_lines.jpg",horizontal_lines_img) 57 | 58 | # Weighting parameters, this will decide the quantity of an image to be added to make a new image. 59 | alpha = 0.5 60 | beta = 1.0 - alpha 61 | 62 | # This function helps to add two image with specific weight parameter to get a third image as summation of two image. 63 | img_final_bin = cv2.addWeighted(verticle_lines_img, alpha, horizontal_lines_img, beta, 0.0) 64 | img_final_bin = cv2.erode(~img_final_bin, kernel, iterations=2) 65 | (thresh, img_final_bin) = cv2.threshold(img_final_bin, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU) 66 | 67 | # For Debugging 68 | # Enable this line to see verticle and horizontal lines in the image which is used to find boxes 69 | cv2.imwrite("inter_processing/img_final_bin.jpg",img_final_bin) 70 | 71 | # Find contours for image, which will detect all the boxes 72 | _, contours, hierarchy = cv2.findContours(img_final_bin, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 73 | 74 | # Sort all the contours by top to bottom. 75 | (contours, boundingBoxes) = sort_contours(contours, method="top-to-bottom") 76 | idx = 0 77 | for c in contours: 78 | # Returns the location and width,height for every contour 79 | x, y, w, h = cv2.boundingRect(c) 80 | 81 | # If the box height is greater then 20, widht is >80, then only save it as a box in "cropped/" folder. 82 | if (w > 80 and h > 20) and w > 3*h: 83 | idx += 1 84 | new_img = img[y:y+h, x:x+w] 85 | cv2.imwrite(cropped_dir_path+str(idx) + '.png', new_img) 86 | 87 | box_extraction("sample_image.jpg", "./Cropped/") #image to be extracted, directory where to save cropped images 88 | -------------------------------------------------------------------------------- /cropped/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/cropped/1.png -------------------------------------------------------------------------------- /cropped/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/cropped/10.png -------------------------------------------------------------------------------- /cropped/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/cropped/2.png -------------------------------------------------------------------------------- /cropped/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/cropped/3.png -------------------------------------------------------------------------------- /cropped/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/cropped/4.png -------------------------------------------------------------------------------- /cropped/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/cropped/5.png -------------------------------------------------------------------------------- /cropped/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/cropped/6.png -------------------------------------------------------------------------------- /cropped/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/cropped/7.png -------------------------------------------------------------------------------- /cropped/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/cropped/8.png -------------------------------------------------------------------------------- /cropped/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/cropped/9.png -------------------------------------------------------------------------------- /inter_processing/Image_bin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/inter_processing/Image_bin.jpg -------------------------------------------------------------------------------- /inter_processing/horizontal_lines.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/inter_processing/horizontal_lines.jpg -------------------------------------------------------------------------------- /inter_processing/img_final_bin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/inter_processing/img_final_bin.jpg -------------------------------------------------------------------------------- /inter_processing/verticle_lines.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/inter_processing/verticle_lines.jpg -------------------------------------------------------------------------------- /sample_image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imneonizer/Crop-Rows-From-Tables-using-OpenCV-and-Python/752ae504add2dcc643d4f43d09bc7ea46aae8942/sample_image.jpg --------------------------------------------------------------------------------