【问题标题】:Is there a way to use similar method to OpenCv's MinMaxLoc to get a list of n max values instead of only one max value?有没有办法使用与 OpenCv 的 MinMaxLoc 类似的方法来获取 n 个最大值的列表,而不是只有一个最大值?
【发布时间】:2019-08-28 07:14:42
【问题描述】:

MinMaxLoc 返回给定input arrayminmax 值,但是我想对那个数组的n max 值进行绅士化?

是循环的唯一方法,如果是,如何使用OpenCvSharp

我的图片是这样的:

【问题讨论】:

  • 数组是一维的还是多维的?为什么要使用OpenCvSharp
  • 我的特定输入是灰度图像的二维数组
  • 经过一番谷歌搜索后,我似乎无法找到使用 OpenCvSharp 的通用解决方案 :( 我认为您必须推出自己的解决方案。我的 c# 生锈了,所以我不知道我的手动 c# 解决方案是。如果你愿意,我可以展示我如何在 python 中做到这一点。
  • 是的,python 可能非常有用
  • 添加了一个答案,希望我正确地解释了你的问题,希望这个答案是有用的。

标签: c# opencv opencvsharp


【解决方案1】:

这是我在 python 中的做法(我的 c# 生锈了,我在谷歌上找不到任何关于如何在 OpenCvSharp 中找到 n 个最大元素的信息)。

data = [[1,2,3],[4,5,6],[7,8,9]]

# first, collapse the 2 dimensional input into 1 dimension
collapsed_data = []
for row in data:
    collapsed_data.extend(row)

# now sort the collapsed input and get the 5 largest elements
sorted_data = sorted(collapsed, reverse=True)

k_largest = sorted_data[:k]

请注意,有更有效的方法可以使用最小/最大堆来执行此操作,但要编写大量代码,我不确定您是否需要性能。如果您这样做了,那么这些解决方案只需 google 一下。

【讨论】:

  • K,这很有用,所以我可以使用 Linq 什么的,会回来,会检查性能,因为我需要它来提高效率
【解决方案2】:

假设您有一个矩形数组,您可以通过以下方式获得 n 个最大值:

var numValuesToGet = 2;
var inputArray = new int[,] {{1,2},{3,4},{5,6}};
var result = inputArray.Cast<int>().OrderByDescending(x=>x).Take(numValuesToGet);

同样,您可以通过将OrderByDescending 替换为OrderBy 来获得n 个最小值。

【讨论】:

    猜你喜欢
    • 2022-11-20
    • 2023-03-23
    • 2022-01-06
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多