先附上OpenCV官方解释链接OpenCV: Operations on arrays
测试代码为
for (int i = 0; i < mscores.cols; i++)
{
cv::Mat sortID;
cv::sortIdx(mscores.row(i), sortID, cv::SORT_DESCENDING);//按照从大到小的顺序排列该行,输出为sortID
for (int ii = 0; ii < sortID.cols; ii++)
{
std::cout << sortID.at<int>(0, ii) << " "
<< sortID.at<float>(0, ii) << " "
<< mscores.at<float>(i, ii) << std::endl;
}
}
输出的结果如下图所示。可以看到输出的sortID矩阵是mscore矩阵的第i行从大到小排列的指针位置信息,当sortID的属性是int时即为数组的序号。
将sortIdx改为sort函数,结果如下图所示。sort函数是直接存储原矩阵从大到小的排列数值的,输出的矩阵和原始的mscores矩阵类型相同,都是float。