Автор оригинала: Team Python Pool.
Привет Pythoneers и добро пожаловать в этой статье мы рассмотрим cv2 boundingrect. Наряду с этим мы также рассмотрим его синтаксис для общего лучшего понимания. Затем мы увидим применение всей теоретической части на нескольких примерах. Мы рассмотрели различные функции cv2, такие как imshow и normalize. Прежде чем перейти ко всем этим примерам и другим вещам, давайте кратко рассмотрим процесс.
cv2 boundingrect() – это функция, используемая для создания приближенного прямоугольникавместе с изображением. Основное назначение этой функции-выделить область интереса после получения внешней формы изображения.
Как использовать cv2 boundingrect в Python
В этом разделе основное внимание будет уделено выполнению функции. Для этого нам нужно пройти несколько шагов, которые мы будем рассматривать по одному. Но прежде нам нужно обсудить саму идею контуров. Они представляют собой список python всех контуров(кривая, соединяющая все точки вдоль границы) на изображении. Каждый контур представляет собой числовой массив координат (x,y) граничных точек объекта.
Теперь давайте приступим к реализации этой функции. Для этого, во-первых, нам нужен образец изображения, на котором мы можем выполнять операции. Нам нужно преобразовать изображение в оттенки серого для лучшего общего результата. После чего нам нужно найти контуры и после этого мы можем использовать нашу функцию, чтобы выделить их.
Код выглядит следующим образом:
import cv2 .imread("21.png") cv2.imshow("image",image).cvtColor(image, cv2.COLOR_BGR2GRAY) cv2.imshow("Changed",gray).threshold(gray,127,255,cv2.THRESH_BINARY).findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) print("Number of contours:" + str(len(contours))).boundingRect(contours[0]) cv2.rectangle(image,(x,y),(x+w,y+h),(255,0,0),3) cv2.imshow("result",image) cv2.waitKey(0) cv2.destroyAllWindows()
Выше мы видим код, необходимый для выполнения функции. Теперь давайте пройдемся строчка за строчкой и попробуем выяснить, как это работает. Прежде всего, мы попытались отобразить наше предметное изображение с помощью функции imshow. На следующем этапе мы сосредоточимся на преобразовании изображения в оттенки серого. Для этого мы использовали “cvtColor”. Эта функция может конвертировать изображение из одного цветового пространства в другое. После этого мы использовали функцию “threshold” для усиления пикселей в a href=”https://homepages.inf.ed.ac.uk/rbf/HIPR2/gryimage.htm”>изображение в оттенках серого. href=”https://homepages.inf.ed.ac.uk/rbf/HIPR2/gryimage.htm”>изображение в оттенках серого.
До сих пор мы завершили 1/3 всей процедуры. На следующем этапе нам нужно выяснить количество контуров. Для этого мы использовали метод find contour. Для этого требуется три аргумента, как показано в коде. После чего мы использовали оператор print для печати количества контуров.
Здесь мы успешно нашли значения для контура. Теперь, после этого, мы использовали функцию cv2 boundingrect. Эта функция в общей сложности возвращает в общей сложности 4 балла. Затем мы использовали метод cv2 rectangle для рисования прямоугольника относительно координат. Наконец, мы получаем следующий результат, и, следовательно, наш код проверяется.
При желании мы также можем добавить отступы к изображению. Все, что нам нужно сделать, это скопировать функцию Make border модуля cv2. Нам нужно добавить следующий код к нашему коду
Если вы сравните это изображение с нашим приведенным выше выводом. Вы можете определить разницу между двумя результатами.
Создание нескольких масок
Используя функцию cv2 boundingrect наряду с некоторыми другими функциями cv2, мы также можем создавать несколько масок. Код, с помощью которого мы можем это сделать, также приведен ниже
import cv2.imread('3.jpeg') cv2.imshow('sample',org).imread('3.jpeg',0).threshold(img,127,255,0).findContours(thresh, 1, 2) for cnt in contours: .boundingRect(cnt) .rectangle(img,(x,y),(x+w,y+h),(0,255,0),2) cv2.imshow("image", img) cv2.waitKey()
Здесь вы можете сравнить исходное изображение и замаскированное изображение бок о бок.
Идентификационная цифра
С помощью этой функции cv2 вы также можете идентифицировать цифры на изображении. Код, с помощью которого вы можете это сделать, приведен ниже.
import cv2 import numpy as np.imread( "9.png").cvtColor(image, cv2.COLOR_BGR2GRAY) th,.threshold(gray_image, 100, 255, cv2.THRESH_OTSU|cv2.THRESH_BINARY_INV).findContours(cv2.morphologyEx(threshed, cv2.MORPH_OPEN, np.ones((2,2))), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2] nh,.shape[:2] for cnt in cnts: .boundingRect(cnt) if h.3 * nh: cv2.rectangle(image, (x,y), (x+w, y+h), (0, 0, 0), 10, cv2.LINE_AA) cv2.imshow("dst", image) cv2.waitKey()
См.После успешного выполнения программы прямоугольное поле рисуется вокруг цифры на изображении.
cv2.boundingrect error – 215 утверждение не удалось?
Этот тип ошибки обычно возникает, если вы определили контуры [0] или контуры [1]. Это было правильно использовать в старых версиях open Cv, но вам нужно определить[0] только для более новых версий.
Вывод
В этой статье мы рассмотрели cv2 boundingrect. Кроме того, мы также рассмотрели его синтаксис и аргументы. Для лучшего понимания мы рассмотрели пример. Затем мы строчку за строчкой прошлись по коду и поняли, как он работает. Мы можем заключить, что это помогает нам, рисуя прямоугольник вокруг двоичного изображения.
Надеюсь, эта статья смогла развеять все сомнения. Но если у вас есть какие-либо нерешенные вопросы, не стесняйтесь писать их ниже в разделе комментариев. Хватит читать это. Почему бы не прочитать о python lock далее.