Error "ValueError: too many values to unpack (expected 4)" on official structured edge detection and edgeboxes example

Error "ValueError: too many values to unpack (expected 4)" on official structured edge detection and edgeboxes example

我需要有关基于随机森林方法的 StructuredEdgeDetection 的 OpenCV 实现方面的帮助。我正在使用 official demo 并在第 22 行 ValueError: too many values to unpack.

上出错

这是 python 脚本:

import cv2 as cv
import numpy as np
import sys

if __name__ == '__main__':
    model = './model.yml'
    im = cv.imread('./L8C5M.png')

    edge_detection = cv.ximgproc.createStructuredEdgeDetection(model)
    rgb_im = cv.cvtColor(im, cv.COLOR_BGR2RGB)
    edges = edge_detection.detectEdges(np.float32(rgb_im) / 255.0)

    orimap = edge_detection.computeOrientation(edges)
    edges = edge_detection.edgesNms(edges, orimap)

    edge_boxes = cv.ximgproc.createEdgeBoxes()
    edge_boxes.setMaxBoxes(30)
    boxes = edge_boxes.getBoundingBoxes(edges, orimap)

    print(boxes)
    for b in boxes:
        x, y, w, h = b
        cv.rectangle(im, (x, y), (x+w, y+h), (0, 255, 0), 1, cv.LINE_AA)

    cv.imshow("edges", edges)
    cv.imshow("edgeboxes", im)
    cv.waitKey(0)
    cv.destroyAllWindows()

我期待这样的结果

错误发生在 for 循环中的第 x, y, w, h = b 行。

变量boxes是一个由两个numpy数组组成的元组

根据你要绘制边缘检测算法找到的边界框的代码。为此,您需要遍历第一个变量数组 boxes,即遍历 boxes[0]

将第 21 行更改为 for b in boxes[0]: 并照常进行。

示例输出:

The method returns (boxes, scores),不仅仅是盒子。这似乎在 2017 年和 2019 年之间发生了变化。

您应该使用此代码:

(boxes, scores) = edge_boxes.getBoundingBoxes(edges, orimap)

然后循环将起作用。

您遇到此问题是因为您对该示例使用了过时的link。 link 您显示的是 2017 年的版本。旧代码适用于 2017/2018 版的 OpenCV。

The current version of the example, from 2019,对应当前的API。当前示例显示了当前 API.

的正确用法

更改如下:https://github.com/opencv/opencv_contrib/commit/6ae9809b2e464b72810298b10c6cf4935886a0f1