OpenCV----疑惑问题

来源:互联网 发布:yum install lftp 编辑:程序博客网 时间:2024/06/06 09:00

《OpenCV教程--基础篇》里面讲了一个二维数组排序的程序,在程序中都是随机生成的数据,但是为什么每次生成的数据都一样,感到疑惑。贴出来和大家探讨一下:

源程序如下:

/* 程序名:cvmat.c
功能:说明矩阵的一些操作方法
*/
#include "cv.h"
#include "highgui.h"
#include <stdio.h>

void PrintMat(CvMat *A);  // 显示矩阵
void GenRandn(CvMat *arr, int seed); // 生成正态分布的随机矩阵
void GenRand(CvMat *arr, int seed); // 生成[0,1]均匀分布的随机矩阵
static int cmp_func( const void* _a, const void* _b, void* userdata ); // 比较函数

void Test_Multiply();  // 测试矩阵乘法
void Test_cvGetRawData();  // 将缓存数据填入CvMat数组中
void Test_DCT();   // 计算DCT变换
void Test_Rand();  // 生成随机数
void Test_SeqSort();  // 二维序列排序

int main()
{
 Test_SeqSort();  // pass
 return 0;
}

// Testing: Sort 2d points in top-to-bottom left-to-right order.
void Test_SeqSort()
{
 CvMemStorage* storage = cvCreateMemStorage(0);
 CvSeq* seq = cvCreateSeq( CV_32SC2, sizeof(CvSeq), sizeof(CvPoint), storage );
 int i;

 printf("/n=== Test sequence sorting ===");

 for( i = 0; i < 10; i++ )
 {
  CvPoint pt;
  pt.x = rand() % 1000;  // 1000 以内的随机数
  pt.y = rand() % 1000;
  cvSeqPush( seq, &pt );
 }

 printf("/nOriginal point set:/n");
 for( i = 0; i < seq->total; i++ )
 {
  CvPoint* pt = (CvPoint*)cvGetSeqElem( seq, i );
  printf( "(%d,%d)/n", pt->x, pt->y );
 }

 cvSeqSort( seq, cmp_func, 0 /* userdata is not used here */ );

 /* print out the sorted sequence */
 printf("/nAfter sorting:/n");
 for( i = 0; i < seq->total; i++ )
 {
  CvPoint* pt = (CvPoint*)cvGetSeqElem( seq, i );
  printf( "(%d,%d)/n", pt->x, pt->y );
 }

 cvClearSeq( seq );   // Sequence clearing should be done before storage clearing
 cvReleaseMemStorage( &storage );
}

static int cmp_func( const void* _a, const void* _b, void* userdata )
{
    CvPoint* a = (CvPoint*)_a;
    CvPoint* b = (CvPoint*)_b;
    int y_diff = a->y - b->y;
    int x_diff = a->x - b->x;
    return y_diff ? y_diff : x_diff;
}

运行结果:

二维数组排序结果

 

和书上运行的结果也一摸一样。有懂的指点一下,谢谢!

原创粉丝点击