human
PythonにCV2がロードされた画像があります。cv2.cannyを使用してエッジを検出した後、画像内のオブジェクトの周りにボックスを描きたいです。Pythonで例を挙げてください。
gpt
cv2 を用いて画像中のオブジェクトの周囲にボックスを描画する方法の 1 つとして， selectROI() 関数を用いる方法があります．この関数を使うと，マウスで矩形を描くことで関心領域（ROI）を選択することができます．そして，その ROI 内で画像を切り出し，出力として表示することができます．

別の方法として、等高線を使うこともできます。等高線は、同じ色や強度を持つオブジェクトを囲む境界線です。cv2.findContours() を用いて画像から輪郭を検出し， cv2.boundingRect() を用いて，各輪郭を囲むバウンディングボックスの座標を取得します．そして， cv2.boundingRect() を用いて，各輪郭を囲む枠の座標を取得します．

以下は，両方のメソッドを用いたコード例です．

```python
#importing cv2 module
import cv2 as cv

#reading an image
img = cv.imread('image.jpg')

#converting it to grayscale
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

#applying Canny edge detection
edges = cv.Canny(gray, 100, 200)

#using selectROI() function
roi = cv.selectROI(edges)
x, y, w, h = roi #getting coordinates of ROI
crop = img[y:y+h, x:x+w] #cropping image within ROI
cv.imshow('Cropped Image', crop) #displaying cropped image

#using contours
contours, hierarchy = cv.findContours(edges, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) #finding contours
for cnt in contours:
    x,y,w,h = cv.boundingRect(cnt) #getting coordinates of bounding box for each contour
    img = cv.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2) #drawing rectangle on original image

cv.imshow('Original Image', img) #displaying original image with boxes

cv.waitKey(0)
cv.destroyAllWindows()
```