2013-07-24 304 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,只需重新索引元素。 –