Есть ли способ использовать метод, аналогичный MinCaxLoc OpenCv, чтобы получить список из n максимальных значений вместо одного максимального значения? - PullRequest
0 голосов
/ 06 апреля 2019

MinMaxLoc возвращает min и max значения данного input array, однако я хотел бы смягчить значения n max этого массива?

Единственный способчтобы сделать цикл, если так, как это сделать, используя OpenCvSharp?

Мое изображение что-то вроде:

enter image description here

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

Предполагая, что у вас есть прямоугольный массив, вы можете получить значения n max следующим образом:

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

Аналогично, вы можете получить значения n min, заменив OrderByDescending на OrderBy.

1 голос
/ 06 апреля 2019

Вот как я это сделаю в Python (мой c # ржавый, и я не могу найти в Google ничего о том, как найти n самых больших элементов в OpenCvSharp).

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.

...