Bradski指出:“要删除序列时,可以使用cvClearSeq(),该例程可清除序列中的所有元素。”
但是,此函数不会将内存存储中已分配的块返回给存储或系统。
他说:“如果要出于其他目的检索该内存,则必须通过cvClearMemStore()清除内存存储”。
该功能似乎不存在:
error C3861: 'cvClearMemStore': identifier not found
在本书的勘误表中,它指出:“'cvClearMemStore'应该是'cvClearMemStorage'”,但是该函数需要一个指向CvMemStorage的指针,而不是CvSeq的指针。
error C2664: 'cvClearMemStorage' : cannot convert parameter 1 from 'CvSeq *' to 'CvMemStorage *'
有任何想法吗?
最佳答案
我相信他的意思是cvClearMemStorage()
:
从标题复制的文本:core/core_c.h
从错误中可以看出,您正在将错误的数据类型传递给此函数。这些函数的 Check the docs 可以确切地知道如何调用它们。
我将尝试使用以下代码进行说明:
// 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 的用法。我发现this one非常有趣。文章底部有一个指向源代码的链接。
关于c++ - 如何在OpenCV中删除cvseq?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5951292/