在OpenCv中对cv :: Mat进行排序

bat*_*man 4 c++ opencv

OpenCV中是否有与[srtd,srtdinds] = sort(dst,'ascend');Matlab 类似的函数?我试过cv::sortIdx(source, dst, cv::SORT_ASCENDING);但它不起作用.我的来源Mat包含一个列.

Aur*_*ius 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);
Run Code Online (Sandbox Code Playgroud)

现在dst包含置换索引,并source包含已排序的数据本身.

  • 你为什么要排序两次?这是低效的.你基本上可以使用sortIdx一次,只需重新索引元素. (3认同)