I'm having trouble with import cv in my python code.
My issue is I need to draw a rectangle around regions of interest in an image. How can this be done in python? I'm doing object detection and would like to draw a rectangle around the objects I believe I've found in the image.
4 Answers
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 12As 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).
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) 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).