我试图在图像的左半部分和右半部分找到峰值(基本上这是一条左右车道的二进制图像)。 出于某种原因,左边的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
错误在哪里?
答案 0 :(得分:3)
当您查看直方图的形状时,会给出线索。它是2维的,因为它具有import test_celery
from celery import chain
from celery.result import AsyncResult
from celery.utils.graph import DependencyGraph
def method():
async_chain = chain(chain(test_celery.tsum.si([1, 2]), test_celery.ident.si(2)), chain(test_celery.tsum.si([2,3]), test_celery.ident.si(3)))
chain_task_names = [task.task for task in async_chain.tasks]
# run the chain
chain_results_tasks = async_chain.apply_async()
print("async_chain=", dir(chain_results_tasks))
print("result.get={}".format(chain_results_tasks.status))
# create a list of names and tasks in the chain
chain_tasks = zip(chain_task_names, reversed(list(get_chain_nodes(chain_results_tasks))))
xx = list(get_chain_nodes(chain_results_tasks))
#
print(dir(chain_results_tasks))
for task in async_chain.tasks:
print("dir task={}".format(dir(task)))
print("task_name={} task_id={}".format(task.task, task.parent_id))
for i in xx:
res = AsyncResult(i)
# print("res={}".format(dir(res)))
parent = get_parent_node(i)
print(parent.build_graph(intermediate=True))
print("parent_task={}".format(dir(parent)))
print(xx[-1].build_graph(intermediate=True))
method()
当您致电(1280, 3)
时,{2}数组会调用np.argmax(histogram[:midpoint])
,并在找到最大值/索引之前首先解开
你可以在numpy docs中看到一个例子:
argmax