opencv提供了排序函數: sort和sorIdx , 其中sortIdx可以獲取排序后的序號,比較方便;
sortIdx原型:
C++: void sortIdx(InputArray src, OutputArray dst, int flags) Python: cv2.sortIdx(src, flags[, dst]) → dst
Parameters: src – Source single-channel array. dst – Destination integer array of the same size as src . flags – Operation flags that could be a combination of the following values: CV_SORT_EVERY_ROW Each matrix row is sorted independently. CV_SORT_EVERY_COLUMN Each matrix column is sorted independently. This flag and the previous one are mutually exclusive. CV_SORT_ASCENDING Each matrix row is sorted in the ascending order. CV_SORT_DESCENDING Each matrix row is sorted in the descending order. This flag and the previous one are also mutually exclusive.
sort原型:
Sorts each row or each column of a matrix. C++: void sort(InputArray src, OutputArray dst, int flags) Python: cv2.sort(src, flags[, dst]) → dst Parameters: src – Source single-channel array. dst – Destination array of the same size and type as src . flags – Operation flags, a combination of the following values: CV_SORT_EVERY_ROW Each matrix row is sorted independently. CV_SORT_EVERY_COLUMN Each matrix column is sorted independently. This flag and the previous one are mutually exclusive. CV_SORT_ASCENDING Each matrix row is sorted in the ascending order. CV_SORT_DESCENDING Each matrix row is sorted in the descending order. This flag and the previous one are also mutually exclusive. The function sort sorts each matrix row or each matrix column in ascending or descending order. So you should pass two operation flags to get desired behaviour. If you want to sort matrix rows or columns lexicographically, you can use STL std::sort generic function with the proper comparison predicate.
這兩個函數都支持矩陣的行、列排序;
以下是例子:
cv::Mat IndexMat; //序號矩陣 cv::sortIdx(matchMat,IndexMat,CV_SORT_ASCENDING + CV_SORT_EVERY_COLUMN); //matchMat為原始數據矩陣
sort同上,這里就不詳細說明了,使用方法請見:www.opencv.org.cn/opencvdoc/2.3.2/html/modules/core/doc/operations_on_arrays.html?highlight=sort#cv2.sort