Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

How can i sort the contours from left to right and top to bottom?

import cv2 import numpy as np

image = cv2.imread('Letter.png') cv2.imshow('orig',image) cv2.waitKey(0)

gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) cv2.imshow('gray',gray) cv2.waitKey(0) cv2.destroyAllWindows()

ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV) cv2.imshow('second',thresh) cv2.waitKey(0) cv2.destroyAllWindows()

kernel = np.ones((5,5), np.uint8) img_dilation = cv2.dilate(thresh, kernel, iterations=1) cv2.imshow('dilated',img_dilation) cv2.waitKey(0) cv2.destroyAllWindows()

im2,ctrs, hier = cv2.findContours(img_dilation.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

sort contours

sorted_ctrs = sorted(ctrs, key=lambda ctr: cv2.boundingRect(ctr)[1])

for i, ctr in enumerate(sorted_ctrs): # Get bounding box x, y, w, h = cv2.boundingRect(ctr)

# Getting ROI
roi = image[y:y+h, x:x+w]

# show ROI
cv2.imshow('segment no:'+str(i),roi)
cv2.rectangle(image,(x,y),( x + w, y + h ),(90,0,255),2)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imshow('marked areas',image) cv2.waitKey(0) cv2.destroyAllWindows() print "Number of Contours %d ->"%len(ctrs)

click to hide/show revision 2
None

updated 2017-12-01 06:02:10 -0600

berak gravatar image

How can i sort the contours from left to right and top to bottom?

import cv2 import numpy as np

image = cv2.imread('Letter.png')
cv2.imshow('orig',image)
cv2.waitKey(0)

cv2.waitKey(0)

gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) cv2.imshow('gray',gray) cv2.waitKey(0) cv2.destroyAllWindows()

cv2.destroyAllWindows()

ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV) cv2.imshow('second',thresh) cv2.waitKey(0) cv2.destroyAllWindows()

cv2.destroyAllWindows()

kernel = np.ones((5,5), np.uint8) img_dilation = cv2.dilate(thresh, kernel, iterations=1) cv2.imshow('dilated',img_dilation) cv2.waitKey(0) cv2.destroyAllWindows()

cv2.destroyAllWindows()

im2,ctrs, hier = cv2.findContours(img_dilation.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

cv2.CHAIN_APPROX_SIMPLE)

sort contours

#sort contours sorted_ctrs = sorted(ctrs, key=lambda ctr: cv2.boundingRect(ctr)[1])

cv2.boundingRect(ctr)[1])

for i, ctr in enumerate(sorted_ctrs): # Get bounding box x, y, w, h = cv2.boundingRect(ctr)

cv2.boundingRect(ctr)
 # Getting ROI
 roi = image[y:y+h, x:x+w]

 # show ROI
 cv2.imshow('segment no:'+str(i),roi)
 cv2.rectangle(image,(x,y),( x + w, y + h ),(90,0,255),2)
 cv2.waitKey(0)
 cv2.destroyAllWindows()

cv2.imshow('marked areas',image) cv2.waitKey(0) cv2.destroyAllWindows() print "Number of Contours %d ->"%len(ctrs)

->"%len(ctrs)

How can i sort the contours from left to right and top to bottom?

Code:

import cv2
import numpy as np

np

    image = cv2.imread('Letter.png')
 cv2.imshow('orig',image)
cv2.waitKey(0)

    cv2.waitKey(0)

    gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
 cv2.imshow('gray',gray)
cv2.waitKey(0)
cv2.destroyAllWindows()

    cv2.waitKey(0)
    cv2.destroyAllWindows()

    ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)
 cv2.imshow('second',thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()

    cv2.waitKey(0)
    cv2.destroyAllWindows()

    kernel = np.ones((5,5), np.uint8)
 img_dilation = cv2.dilate(thresh, kernel, iterations=1)
 cv2.imshow('dilated',img_dilation)
cv2.waitKey(0)
cv2.destroyAllWindows()

    cv2.waitKey(0)
    cv2.destroyAllWindows()

    im2,ctrs, hier = cv2.findContours(img_dilation.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

 #sort contours
 sorted_ctrs = sorted(ctrs, key=lambda ctr: cv2.boundingRect(ctr)[1])

 for i, ctr in enumerate(sorted_ctrs):
     # Get bounding box
     x, y, w, h = cv2.boundingRect(ctr)

     # Getting ROI
     roi = image[y:y+h, x:x+w]

     # show ROI
     cv2.imshow('segment no:'+str(i),roi)
     cv2.rectangle(image,(x,y),( x + w, y + h ),(90,0,255),2)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    cv2.waitKey(0)
        cv2.destroyAllWindows()

    cv2.imshow('marked areas',image)
cv2.waitKey(0)
cv2.destroyAllWindows()
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    print "Number of Contours %d ->"%len(ctrs)

How can i sort the contours from left to right and top to bottom?

Code:

import cv2
import numpy as np

    image = cv2.imread('Letter.png')
    cv2.imshow('orig',image)
    cv2.waitKey(0)

    gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    cv2.imshow('gray',gray)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)
    cv2.imshow('second',thresh)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    kernel = np.ones((5,5), np.uint8)
    img_dilation = cv2.dilate(thresh, kernel, iterations=1)
    cv2.imshow('dilated',img_dilation)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    im2,ctrs, hier = cv2.findContours(img_dilation.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    #sort contours
    sorted_ctrs = sorted(ctrs, key=lambda ctr: cv2.boundingRect(ctr)[1])

    for i, ctr in enumerate(sorted_ctrs):
        # Get bounding box
        x, y, w, h = cv2.boundingRect(ctr)

        # Getting ROI
        roi = image[y:y+h, x:x+w]

        # show ROI
        cv2.imshow('segment no:'+str(i),roi)
        cv2.rectangle(image,(x,y),( x + w, y + h ),(90,0,255),2)
        cv2.waitKey(0)
        cv2.destroyAllWindows()

    cv2.imshow('marked areas',image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    print "Number of Contours %d ->"%len(ctrs)