本文主要是关于OpenCV中的排序的实现。
目录
1. cv::sotr()
2. cv::sortIdx()
1. cv::sotr()
cv::sort()函数用于二维矩阵,只支持单通道源矩阵。函数声明如下:
void cv::sort(
cv::InputArray src,
cv::OutputArray dst,
int flags
);
cv::sotr()分别对每行每列进行排序。结果是一个新的矩阵,该结果矩阵与源矩阵具有想用的尺寸和类型。排序可以是升序或降序,可以对行或列排序,由参数flags指定。
参数flags可取的值有:
- cv::SORT_EVERY_ROW? ? ? ? 对每一行排序
- cv::SORT_EVERY_COLUMN? ? ? ? 对每一列排序
- cv::SORT_ASCENDING? ? ? ? 升序
- cv::SORT_DESCENDING? ? ? ? 降序
从上面的选择中每组选择一个组合使用。
2. cv::sortIdx()
cv::sortIdx()函数与cv::sort()类似,仅用于单通道二维矩阵,分别对每行或每列进行排序。函数声明:
void cv::sortIdx(
cv::InputArray src,
cv::OutputArray dst,
int flags
);
与cv::sort()不同的是,cv::sortIdx()操作的结果是与源矩阵大小相同但包含排序元素整数索引的新矩阵dst。详细可以看下面的例子:
cv::Mat A = (cv::Mat_<int>(2, 4) << 45,4,2,3,69,7,10,25);
cv::Mat dst;
cv::sort(A, dst, cv::SORT_ASCENDING | cv::SORT_EVERY_ROW); // 按升序每行排序
cv::Mat dst_idx;
cv::sortIdx(A, dst_idx, cv::SORT_ASCENDING | cv::SORT_EVERY_ROW);
std::cout << "A = \n " << A << std::endl;
std::cout << "dst = \n " << dst << std::endl;
std::cout << "dst_idx = \n " << dst_idx << std::endl;
显示结果:
?
|