web-dev-qa-db-ja.com

pythonの関心領域の周りに長方形を描く方法

pythonコードのimport cvに問題があります。

私の問題は、画像の関心領域の周りに長方形を描く必要があることです。これをPythonでどのように行うことができますか?私はオブジェクトの検出を行っており、画像で見つけたと思われるオブジェクトの周りに長方形を描きたいと思っています。

39
user961627

古いcvモジュールを試さないでください、cv2を使用してください:

import cv2

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


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

[編集]以下の追加の質問を追加します。

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

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

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'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)
2
jdhao

他の答えが言ったように、必要な関数はcv2.rectangle()ですが、バウンディングボックスの頂点の座標は、タプル内にある場合は整数である必要があり、(left, top)の順序である必要があることに注意してくださいおよび(right, bottom)。または、同等に、(xmin, ymin)および(xmax, ymax)

0
Yanfeng Liu