opencv内存管理器2-cvSeqPartition聚类

本文介绍了OpenCV中CvSeq序列的拆分功能,特别是如何使用cvSeqPartition函数根据用户定义的标准进行拆分。在聚类过程中,该函数依据欧氏距离对随机生成的点进行分类,通过比较函数实现点之间的距离判断。拆分结果存储在labels参数中,表示每个元素所属的类别。
摘要由CSDN通过智能技术生成

1.opencv的序列CvSeq中有一个函数可以按照用户设定的标准来拆分序列。


拆分操作需要申请新的内存用于存储结果,参数labels是指向序列的指针的指针,当函数调用结束时,参数labels中是一个整数序列,序列中的元素是跟序列seq中元素一一对应,这些参数的值从0开始递增,是拆分之后元素的类别的标志。is_euqal参数对应我们自己定义的比较函数,userdata为比较函数的参数。对随机生成的点进行模拟聚类,比较两个点之间的欧氏距离,小于特定的阈值时返回1.


源码:

#include "cxcore.h"
#include "highgui.h"
#include <stdio.h>

CvSeq* point_seq = 0;
IplImage* canvas = 0;
CvScalar* colors = 0;
int pos = 5;

int is_equal(const void* _a, const void* _b, void* userdata)
{
	CvPoint a = *(const CvPoint*)_a;
	CvPoint b = *(const CvPoint*)_b;
	double threshold = *(double*)userdata;
	return (double)(a.x - b.x)*(a.x - b.x) + (double)(a.y - b.y)*(a.y - b.y) <= threshold;
}

void on_track(int pos)
{
	CvSeq* labels = 0; //声明输出标签
	double threshold = pos*pos; //定义阈值为pos^2
	int i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值