#c# #opencv #opencvsharp
#c# #opencv
Вопрос:
MinMaxLoc
возвращает min
и max
заданные значения input array
, однако я хотел бы указать n
max
значения этого массива?
Это единственный способ выполнить цикл, если да, то как это сделать с помощью OpenCvSharp
?
Мое изображение выглядит примерно так:
Комментарии:
1. Является ли массив одномерным или многомерным? Почему вы хотите сделать это с помощью
OpenCvSharp
?2. Мой конкретный ввод представляет собой двумерный массив серого изображения
3. После некоторого поиска в Google я, похоже, не могу найти общее решение с использованием OpenCvSharp : (Я думаю, вам придется создать свое собственное решение. Мой c # устарел, поэтому я не знаю, насколько полезным было бы мое ручное решение на c #. Я могу показать, как я мог бы сделать это на python, если хотите.
4. Да, python может быть очень полезен
5. Добавлен ответ, надеюсь, я правильно интерпретировал ваш вопрос и, надеюсь, ответ полезен.
Ответ №1:
Вот как я бы сделал это на 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.
Комментарии:
1. К, это полезно, поэтому я мог бы использовать 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);
Аналогично, вы могли бы получить n минимальных значений, заменив OrderByDescending
на OrderBy
.