计算视频相邻帧的PCC值,将小于阈值T的PCC值与其对应的帧号保存在GrayPCC中,并从小到大排序。
CvMemStorage *stor=cvCreateMemStorage(0);
CvSeq *GrayPCC = cvCreateSeq(CV_32FC2,sizeof(CvSeq),sizeof(Point_<float>),stor);
calPCC(filename,GrayPCC);
调用calPCC函数计算,PCC值保存在framePCC数组中。
float threshold = 0.7f;
Point_<float> index_PCC;
for(int i = 1; i < frameToStop - frameToStart; i++)
if(framePCC[i]< threshold)
{
index_PCC.x = (float)i;
index_PCC.y = framePCC[i];
cvSeqPush(PCCSeq,&index_PCC);
}
注意保持Point_<float>类型一致。
cvSeqSort( PCCSeq, (CvCmpFunc)cmp_func, 0 /* userdata is not used here */ ); //对seq排序
Point_<float>* SeqPointer; //将排序结果逐一输出
for(int i = 0; i<PCCSeq->total ;i++)
{
SeqPointer = (Point_<float>*)cvGetSeqElem(PCCSeq, i);
cout<<"!!"<<CV_GET_SEQ_ELEM( Point_<float>, PCCSeq, i )->x<<","<<CV_GET_SEQ_ELEM( Point_<float>, PCCSeq, i )->y<<endl;
}
static int cmp_func( const void* _a, const void* _b, void* userdata )
{
Point_<float>* a = (Point_<float>*)_a;
Point_<float>* b = (Point_<float>*)_b;
if (a->y<=b->y)
return -1;
else
return 1;
}
cvSeqSort 的使用参考 http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=5721
刚开始排序结果没有顺序,检查了半天发现写成了 static float cmp_func 崩溃。