如何在Python中使用OpenCV SortIdx()?
我是OpenCV的新手,我在其Python版本中使用了它。我的问题是,我需要对一个矩阵进行排序,我找到了方法sortIdx(),它似乎解决了我的问题,但我不知道如何使用它。我有以下代码:如何在Python中使用OpenCV SortIdx()?,python,sorting,opencv,Python,Sorting,Opencv,我是OpenCV的新手,我在其Python版本中使用了它。我的问题是,我需要对一个矩阵进行排序,我找到了方法sortIdx(),它似乎解决了我的问题,但我不知道如何使用它。我有以下代码: matr=np.array([ [6,8,5,12], [2,1,10,9], [3,4,11,7] ]) sorted_matr=cv2.sortIdx(matr,cv2.SORT_EVERY_COLUMN|cv2.SOR
matr=np.array([
[6,8,5,12],
[2,1,10,9],
[3,4,11,7]
])
sorted_matr=cv2.sortIdx(matr,cv2.SORT_EVERY_COLUMN|cv2.SORT_ASCENDING)
print(sorted_matr)
它给了我以下结果:
[[1 1 0 2]
[2 2 1 1]
[0 0 2 0]]
当我希望像这样(我不是在寻找m-1元素,这只是一个例子):
无论如何,我只想知道如何在Python中使用<代码> SoTrxx<代码>(我只在C++中找到文档,在第二个参数中接收函数,一个新的矩阵…)来排序矩阵,以及如何使用这个新的顺序。
谢谢大家 对于基本矩阵运算,NumPy可能是比OpenCV更好的选择。OpenCV只能对行或列进行独立排序,而可以在排序之前展平矩阵(
axis=None
):
结果是
[[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]]
或者,下面的代码使用索引进行排序给出相同的结果:(对应于OpenCV的sortIdx)
注意:这里的排序\u idxs
是[5,4,8,9,2,0,11,1,7,6,10,3]
,与您的问题不匹配,因为它们用于排序,而不是为每个元素提供排名
sorted_matr = np.sort(matr, axis=None).reshape(matr.shape)
[[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]]
sort_idxs = np.argsort(matr, axis=None)
sorted_matr = matr.flatten()[sort_idxs].reshape(matr.shape)