Как нарисовать прямоугольник вокруг интересующей области в python

У меня возникают проблемы с import cv в моем коде на Python.

Моя проблема: мне нужно нарисовать прямоугольник вокруг областей, представляющих интерес для изображения. Как это можно сделать в python? Я делаю обнаружение объекта и хотел бы нарисовать прямоугольник вокруг объектов, которые, я считаю, найдены на изображении.

Ответ 1

пожалуйста, не пытайтесь использовать старый модуль cv, используйте cv2:

import cv2

cv2.rectangle(img, (x1, y1), (x2, y2), (255,0,0), 2)


x1,y1 ------
|          |
|          |
|          |
--------x2,y2

[edit], чтобы добавить следующие вопросы ниже:

cv2.imwrite("my.png",img)

cv2.imshow("lalala", img)
k = cv2.waitKey(0) # 0==wait forever

Ответ 2

Вы можете использовать cv2.rectangle():

cv2.rectangle(img, pt1, pt2, color, thickness, lineType, shift)

Draws a simple, thick, or filled up-right rectangle.

The function rectangle draws a rectangle outline or a filled rectangle
whose two opposite corners are pt1 and pt2.

Parameters
    img   Image.
    pt1   Vertex of the rectangle.
    pt2    Vertex of the rectangle opposite to pt1 .
    color Rectangle color or brightness (grayscale image).
    thickness  Thickness of lines that make up the rectangle. Negative values,
    like CV_FILLED , mean that the function has to draw a filled rectangle.
    lineType  Type of the line. See the line description.
    shift   Number of fractional bits in the point coordinates.

У меня есть объект PIL Image, и я хочу нарисовать прямоугольник на этом изображении, но метод PIL ImageDraw.rectangle() не может указать ширину линии. Мне нужно преобразовать объект Image в формат изображения opencv2, нарисовать прямоугольник и преобразовать обратно в объект Image. Вот как я это делаю:

# im is a PIL Image object
im_arr = np.asarray(im)
# convert rgb array to opencv bgr format
im_arr_bgr = cv2.cvtColor(im_arr, cv2.COLOR_RGB2BGR)
# pts1 and pts2 are the upper left and bottom right coordinates of the rectangle
cv2.rectangle(im_arr_bgr, pts1, pts2,
              color=(0, 255, 0), thickness=3)
im_arr = cv2.cvtColor(im_arr_bgr, cv2.COLOR_BGR2RGB)
# convert back to Image object
im = Image.fromarray(im_arr)

Ответ 3

Как и в других ответах, вам нужна функция cv2.rectangle(), но имейте в виду, что координаты для вершин ограничивающего прямоугольника должны быть целыми числами, если они находятся в кортеже, и они должны быть в порядке (left, top) и (right, bottom). Или, что эквивалентно, (xmin, ymin), (xmax, ymax).