gpt4 book ai didi

python - 如何在python和opencv中移动ROI的顶点?

转载 作者:行者123 更新时间:2023-12-02 16:27:51 26 4
gpt4 key购买 nike

我试图在ROI中绘制轮廓。
但是,ROI的顶点显示在图像的左侧。
我想将ROI移到照片中指示的位置,但是我不知道该怎么做。
我是OpenCV和Python的新手,所以非常感谢您的帮助。
这是我的代码。

# Object detected
center_x = int(detection[0] * width)
center_y = int(detection[1] * height)
w = int(detection[2] * width)
h = int(detection[3] * height)
# Rectangle coordinates
x = int(center_x - w / 2)
y = int(center_y - h / 2)
boxes.append([x, y, w, h])
confidences.append(float(confidence))
class_ids.append(class_id)

indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.4, 0.3)

for i in range(len(boxes)):
if i in indexes:
x, y, w, h = boxes[i]
label = str(classes[class_ids[i]])
confidence = confidences[i]
color = colors[class_ids[i]]

img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
ret, img_binary = cv2.threshold(img_gray, 15, 255, 0)
roi = img_binary[y:y+h, x:x+w]
contours, hierarchy = cv2.findContours(roi, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(frame, contours, -1, (0,255,0), 3)
print(roi.shape)
print(x, y, w, h)

最佳答案

轮廓的返回坐标与传递给findContours的ROI有关。
即轮廓的x坐标相对于ROI的左上角。与y相同。

由于要在原始图像内而不是在ROI内显示轮廓,因此必须移动它们。

基本上有两种选择:

  • 将ROI的xy传递给findContours,例如
    contours, hierarchy = cv2.findContours(roi, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE, offset=(x,y))

    然后,返回的contours将具有相对于原始图像的坐标。
  • xy传递给drawContours,例如
    cv2.drawContours(frame, contours, -1, (0,255,0), 3, offset=(x,y))

    这将保留contours相对于ROI的坐标,并仅将其显示在原始图像内。

  • 对您而言有意义的取决于您的应用程序。

    第三种选择是通过简单地将 x添加到第一维并将 y添加到第二维来手动移动轮廓。
    输出将与1相同。

    关于python - 如何在python和opencv中移动ROI的顶点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60259859/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com