D
D
Denq2020-06-15 17:17:35
Python
Denq, 2020-06-15 17:17:35

How to select a contour with an inner border in an image using OpenCV?

Here is the image MzkL9.jpg

here is what I getFmEEr.jpg

def img_counter_max(image_file: str):
    img = cv2.imread(image_file)
    # grayscale
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # меняем цветовую модель с BGR на HSV
    cv2.waitKey(0)
    # binarize
    ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
    cv2.waitKey(0)
    # find contours
    ctrs, hier = cv2.findContours(thresh.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
    # sort contours
    sorted_ctrs = sorted(ctrs, key=lambda ctr: cv2.boundingRect(ctr)[0])
    # sorted_ctrs sorted(ctrs, key=cv2.contourArea, reverse=True)[0]
    contour_sizes = [(cv2.contourArea(contour), contour) for contour in sorted_ctrs]
    biggest_contour = max(contour_sizes, key=lambda x: x[0])[1]
    x, y, w, h = cv2.boundingRect(biggest_contour)
    roi = img[y:y + h, x:x + w]
    cv2.imwrite("C:\\Users\\dennn\\PycharmProjects\\untitled2\\imag\\roi1.jpg", roi)
    cv2.rectangle(img, (x, y), (x + w, y + h), (90, 255, 0), 2)
    from tensorflow.python import Size
    resize_img = cv2.resize(img, (512,512))
   # cv2.resize(img, Size(512,512), interpolation=cv2.INTER_AREA)
    cv2.namedWindow("Display frame", cv2.WINDOW_AUTOSIZE);
    cv2.imshow('Display frame', resize_img)
    cv2.waitKey(0)
   # cv2.imwrite("C:\\Users\\dennn\\PycharmProjects\\untitled2\\imag\\1.jpg", roi)


I thought that when I pass again, I will find the next contour, but no ... How can I find the contour of the frame with the text, only it (or select the rectangle where the text is)?

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question