我试图找到图像左右半部分的峰值(基本上这是一条具有左右车道的道路的二值图像)。 由于某种原因,左侧 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
哪里出错了?
最佳答案
当您查看直方图的形状时,就会给出线索。它是二维的,因为它的形状为 (1280, 3)
当您调用np.argmax(histogram[:midpoint])
时,argmax
会在二维数组上调用,并且在找到最大值之前首先会被解开/索引
您可以在 numpy docs 中看到这样的示例:
>>> a = np.arange(6).reshape(2,3)
>>> a
array([[0, 1, 2],
[3, 4, 5]])
>>> np.argmax(a)
5
关于Python - 直方图上的argmax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49743529/