cvSeqSort()函数介绍

opencv官方文档中的介绍:

功能:根据指定的排序规则排序序列中的成员,规则在一个自定义函数中。

cvSeqSort()函数原型:

void cvSeqSort(CvSeq* seq,CvCmpFunc cmp_func, void* userdata)

参数:

seq —— 要排序的序列指针

cmp_func —— 自定义排序规则函数,返回值为-1,0,1中一个,只有返回值为1时,cvSeqsort()才会执行一次位置交换。

userdata —— 用户自定义变量,若cmp_func()函数需要传入额外的参数,将额外参数的指针赋给userdata,cvSeqSort()稍后会将其传入cmp_func(),否则为NULL。


排序规则函数:

cmp_func()函数原型:

static int cmp_func( const void* _a, const void* _b, void* userdata )
参数:

_a,_b —— 序列 seq 的成员,_a 与 _b 相邻且_a 排在 _b 之前。

userdata —— 用户自定义变量,由cvSeqSort()传入。


以下是一个例子,实现的功能是:随机生成一系列二维点,然后根据x坐标值从小到大排列。


#include "opencv2/opencv.hpp"
#include "iostream"
using namespace std;
using namespace cv;

static int cmp_func( const void* _a, const void* _b, void* userdata )
{
	CvPoint* a = (CvPoint*)_a;
	CvPoint* b = (CvPoint*)_b;
	//按x坐标从小到大排列,a的x坐标比b大,则交换位置
	if( a->x > b->x ) return 1;
	if( a->x < b->x ) return -1;
	return 0;
}

void main()
{
	CvMemStorage* storage = cvCreateMemStorage(0);
	CvSeq* seq = cvCreateSeq( CV_32SC2, sizeof(CvSeq), sizeof(CvPoint), storage );

	int i;
	for( i = 0; i < 10; i++ )
	{
		CvPoint pt;
		pt.x = rand();
		pt.y = rand();
		cvSeqPush( seq, &pt );
	}
	cvSeqSort( seq, cmp_func, 0 /* userdata is not used here */ );
	/* print out the sorted sequence */
	for( i = 0; i < seq->total; i++ )
	{
		CvPoint* pt = (CvPoint*)cvGetSeqElem( seq, i );
		cout<<pt->x<<"   "<<pt->y<<endl;
	}
	cvReleaseMemStorage( &storage );

	system("pause");
}

Opencv官方文档中cvSeqSort()例子的解释请参看:

http://blog.163.com/jinlong_zhou_cool/blog/static/22511507320139154550734/


 转载请注明作者和出处:http://blog.youkuaiyun.com/holamirai,未经允许请勿用于商业用途



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值