你如何删除OpenCV的一个cvseq? [英] How do you delete a cvseq in OpenCV?

查看:241
本文介绍了你如何删除OpenCV的一个cvseq?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Bradski指出:当你想删除一个序列,可以使用cvClearSeq(),即清除序列的所有元素的程序。

Bradski states that "When you want to delete a sequence, you can use cvClearSeq(), a routine that clears all elements of the sequence."

然而,这个功能不存在于存储器存储返回分配的块要么商店或系统

HOWEVER, this function does not return allocated blocks in the memory store to either the store or to the system.

他说:如果你想获取用于其他目的的记忆,你必须通过cvClearMemStore()清除内存存储。

He says that "If you want to retrieve that memory for some other purpose, you must clear the memory store via cvClearMemStore()".

这个功能似乎并不存在:

This function does not appear to exist:

error C3861: 'cvClearMemStore': identifier not found

在勘误的书,它指出:'cvClearMemStore'应该是'cvClearMemStorage'不过这个功能需要一个指向CvMemStorage,不CvSeq

In the errata for the book, it states that: " 'cvClearMemStore' should be 'cvClearMemStorage' " but this function expects a pointer to CvMemStorage, not CvSeq.

error C2664: 'cvClearMemStorage' : cannot convert parameter 1 from 'CvSeq *' to 'CvMemStorage *' 

任何想法?

推荐答案

我相信,他的意思 cvClearMemStorage()

清除存储器。这是唯一的方法(!!!)(除cvRestoreMemStoragePos)
     重用分配给存储器 - cvClearSeq,cvClearSet ...
     不释放任何内存。
     孩子存储返回所有块,当它被清除父。

Clears memory storage. This is the only way(!!!) (besides cvRestoreMemStoragePos) to reuse memory allocated for the storage - cvClearSeq,cvClearSet ... do not free any memory. A child storage returns all the blocks to the parent when it is cleared.

文本从头复制:核心/ core_c.h

Text copied from the header: core/core_c.h

你可以从错误告知,要传递错误的数据类型此功能。 检查这些函数的文档 ,以确切地知道如何给他们打电话。

As you can tell from the error, you are passing the wrong data type to this function. Check the docs of these functions to know exactly how to call them.

我会尝试用下面的code来说明:

I'll try to illustrate with the code below:

// Create variable to hold the memory allocated for calculations
CvMemStorage* storage = 0;

// Allocate the memory storage. Param 0 will set the block size to a default value - currently it is about 64K.
storage = cvCreateMemStorage(0);

IplImage* gray = NULL; 
// <insert code to load a gray image here>

/* Retrieves contours from the binary image and returns the number of retrieved contours.
 * cvFindContours will scan through the image and store connected contours in "storage".
 * "contours" will point to the first contour detected.
 */
CvSeq* contours = 0;
cvFindContours(gray, storage, &contours );

// Clear the memory storage which was used before
cvClearMemStorage(storage);

// Release memory
cvReleaseMemStorage(&storage);

有一些教程在那里,说明了如何使用 cvSeq 。我发现这个挺有意思的。有在文章底部的源$ C ​​$ C的链接。

There are a few tutorials out there that shows the use of cvSeq. I found this one quite interesting. There's a link to the source code at the bottom of the post.

这篇关于你如何删除OpenCV的一个cvseq?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆