2013-07-24 296 views
3

在Matlab中,OpenCV中是否有类似于[srtd,srtdinds] = sort(dst,'ascend');的等效函数?我试过cv::sortIdx(source, dst, cv::SORT_ASCENDING);但它不起作用。我的源Mat包含一个列。在OpenCv中对cv :: Mat进行排序

+1

或者至少详细说明为什么它不起作用? – Seanny123

回答

9

cv::sortIdx()文档:

相反重新排序元素本身的,它存储在输出阵列中的排序的元素的索引。

这意味着你将需要调用cv::sort()调用cv::sortIdx()复制Matlab的sort()函数的行为后,元素本身进行排序:

cv::Mat source = cv::Mat::eye(3,3,CV_32F), dst; 
cv::sortIdx(source, dst, CV_SORT_EVERY_ROW + CV_SORT_ASCENDING); 
cv::sort(source, source, CV_SORT_EVERY_ROW + CV_SORT_ASCENDING); 

现在dst包含置换指标,并source包含排序的数据本身。

+2

为什么你排序两次?这是低效的。基本上可以使用sortIdx,只需重新索引元素。 –