如何绘制一个矩形周围的区域感兴趣的巨蟒

我的 Python 代码中的 import cv有问题。

我的问题是,我需要在图像中感兴趣的区域周围绘制一个矩形。 如何在 python 中实现这一点?我正在画目标检测,我想在图片中找到的物体周围画一个矩形。

252475 次浏览

please don't try with the old cv module, use cv2:

import cv2


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




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

[edit] to append the follow-up questions below:

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


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

You can use 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.

I have a PIL Image object and I want to draw rectangle on this image. I want to use opencv2 and draw rectangle, and then convert back to PIL Image object. Here is how I do it:

# im is a PIL Image object
im_arr = np.asarray(im)
# convert rgb array to opencv's 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)

As the other answers said, the function you need is cv2.rectangle(), but keep in mind that the coordinates for the bounding box vertices need to be integers if they are in a tuple, and they need to be in the order of (left, top) and (right, bottom). Or, equivalently, (xmin, ymin) and (xmax, ymax).

The code for drawing a rectangle on an image is:

cv2.rectangle(image, pt1, pt2, color, thickness)

where pt1 is starting point-->(x,y) and pt2 is end point-->(x+w,y+h).