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
我需要有关基于随机森林方法的 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