2

我试图在图像的左右两半找到峰值(基本上这是具有左右车道的道路的二进制图像)。出于某种原因,左边的 argmax 给出了中点右边的值,而右边给出了超出图像大小的值。

这是我的代码

import numpy as np
import cv2

binary_warped = cv2.imread('data\Sobel\warped-example.jpg')
histogram = np.sum(binary_warped[binary_warped.shape[0]//2:,:], axis=0)
plt.plot(histogram)
midpoint = np.int(histogram.shape[0]//2)
leftx_base = np.argmax(histogram[:midpoint])
rightx_base = np.argmax(histogram[midpoint:]) + midpoint
print('Shape {} midpoint {} left peak {} right peak {}'.format(histogram.shape, midpoint, leftx_base, rightx_base))

这是我的输入 二进制扭曲图像

在轴上输入形状 输入形状

理想情况下,左峰应该在 370 左右,右峰应该是 1000 左右,但这是我的结果

Shape (1280, 3) midpoint 640 left peak 981 right peak 1633

上述代码的结果

错误在哪里?

4

1 回答 1

3

当您查看直方图的形状时,就会给出线索。它是二维的,因为它的形状为(1280, 3)

当您调用np.argmax(histogram[:midpoint]),argmax在二维数组上调用时,在找到最大值/索引之前将首先解开

您可以在 numpy文档中看到这样的示例:

>>> a = np.arange(6).reshape(2,3)
>>> a
array([[0, 1, 2],
       [3, 4, 5]])
>>> np.argmax(a)
5
于 2018-04-10T00:49:26.987 回答