问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

cvSeqPush 使用

发布网友 发布时间:2022-06-17 10:21

我来回答

2个回答

热心网友 时间:2023-11-18 00:18

OpenCV:CvMemStorage
1、动态内存存储及操作函数
CvMemStorage
typedef struct CvMemStorage
{
struct CvMemBlock* bottom;
struct CvMemBlock* top;
struct CvMemStorage* parent;
int block_size;
int free_space;
} CvMemStorage;
内存存储器是一个可用来存储诸如序列,轮廓,图形,子划分等动态增长数据结构的底层结构。它是由一系列以同等大小的内存块构成,呈列表型 ---bottom 域指的是列首,top 域指的是当前指向的块但未必是列尾.在bottom和top之间所有的块(包括bottom, 不包括top)被完全占据了空间;在 top和列尾之间所有的块(包括块尾,不包括top)则是空的;而top块本身则被占据了部分空间 -- free_space 指的是top块剩余的空字节数。新分配的内存缓冲区(或显示的通过 cvMemStorageAlloc 函数分配,或隐示的通过 cvSeqPush, cvGraphAddEdge等高级函数分配)总是起始于当前块(即top块)的剩余那部分,如果剩余那部分能满足要求(够分配的大小)。分配后,free_space 就减少了新分配的那部分内存大小,外加一些用来保存适当列型的附加大小。当top块的剩余空间无法满足被分配的块(缓冲区)大小时,top块的下一个存储块被置为当前块(新的top块) -- free_space 被置为先前分配的整个块的大小。如果已经不存在空的存储块(即:top块已是列尾),则必须再分配一个新的块(或从parent那继承,见 cvCreateChildMemStorage)并将该块加到列尾上去。于是,存储器(memory storage)就如同栈(Stack)那样, bottom指向栈底,(top, free_space)对指向栈顶。栈顶可通过 cvSaveMemStoragePos保存,通过 cvRestoreMemStoragePos 恢复指向, 通过 cvClearStorage 重置。
CvMemBlock
内存存储块结构
typedef struct CvMemBlock
{
struct CvMemBlock* prev;
struct CvMemBlock* next;
} CvMemBlock;
CvMemBlock 代表一个单独的内存存储块结构。 内存存储块中的实际数据存储在 header块 之后(即:存在一个头指针 head 指向的块 header ,该块不存储数据),于是,内存块的第 i 个字节可以通过表达式 ((char*)(mem_block_ptr+1))[i] 获得。然而,通常没必要直接去获得存储结构的域。
CvMemStoragePos
内存存储块地址
typedef struct CvMemStoragePos
{
CvMemBlock* top;
int free_space;
} CvMemStoragePos;
该结构(如以下所说)保存栈顶的地址,栈顶可以通过 cvSaveMemStoragePos 保存,也可以通过 cvRestoreMemStoragePos 恢复。
________________________________________
cvCreateMemStorage
创建内存块
CvMemStorage* cvCreateMemStorage( int block_size=0 );
block_size:存储块的大小以字节表示。如果大小是 0 byte, 则将该块设置成默认值 当前默认大小为64k.
函数 cvCreateMemStorage 创建一内存块并返回指向块首的指针。起初,存储块是空的。头部(即:header)的所有域值都为 0,除了 block_size 外.
cvReleaseMemStorage
释放内存块
void cvReleaseMemStorage( CvMemStorage** storage );
storage: 指向被释放了的存储块的指针
函数 cvReleaseMemStorage 释放所有的存储(内存)块 或者将它们返回给各自的 parent(如果需要的话)。 接下来再释放 header块(即:释放头指针 head 指向的块 = free(head))并清除指向该块的指针(即:head = NULL)。在释放作为 parent 的块之前,先清除各自的 child 块。
cvClearMemStorage
清空内存存储块
void cvClearMemStorage( CvMemStorage* storage );
storage:存储存储块
函数 cvClearMemStorage 将存储块的 top 置到存储块的头部(注:清空存储块中的存储内容)。该函数并不释放内存(仅清空内存)。假使该内存块有一个父内存块(即:存在一内存块与其有父子关系),则函数就将所有的块返回给其 parent.
cvMemStorageAlloc
在存储块中分配以内存缓冲区
void* cvMemStorageAlloc( CvMemStorage* storage, size_t size );
storage:内存块.
size:缓冲区的大小.
函数 cvMemStorageAlloc 在存储块中分配一内存缓冲区。该缓冲区的大小不能超过内存块的大小,否则就会导致运行时错误。缓冲区的地址被调整为CV_STRUCT_ALIGN 字节 (当前为 sizeof(double)).
cvMemStorageAllocString
在存储块中分配一文本字符串
typedef struct CvString
{
int len;
char* ptr;
}
CvString;
CvString cvMemStorageAllocString( CvMemStorage* storage, const char* ptr, int len=-1 );
storage:存储块
ptr:字符串
len:字符串的长度(不计算'\0')。如果参数为负数,函数就计算该字符串的长度。
函数 cvMemStorageAlloString 在存储块中创建了一字符串的拷贝。它返回一结构,该结构包含字符串的长度(该长度或通过用户传递,或通过计算得到)和指向被拷贝了的字符串的指针。
cvSaveMemStoragePos
保存内存块的位置(地址)
void cvSaveMemStoragePos( const CvMemStorage* storage, CvMemStoragePos* pos );
storage:内存块.
pos:内存块顶部位置。
函数 cvSaveMemStoragePos 将存储块的当前位置保存到参数 pos 中。 函数 cvRestoreMemStoragePos 可进一步获取该位置(地址)。
cvRestoreMemStoragePos
恢复内存存储块的位置
void cvRestoreMemStoragePos( CvMemStorage* storage, CvMemStoragePos* pos );
storage:内存块.
pos:新的存储块的位置
函数 cvRestoreMemStoragePos 通过参数 pos 恢复内存块的位置。该函数和函数 cvClearMemStorage 是释放被占用内存块的唯一方法。注意:没有什么方法可去释放存储块中被占用的部分内存

热心网友 时间:2023-11-18 00:18

你的程序没问题
UpdateData(true);
m_pic=m_pic;
UpdateData(false);
img=cvLoadImage(m_pic,0);
/*IplImage*img0=cvCloneImage(img);*/
IplImage*img1=cvLoadImage(m_pic,1);
cvNamedWindow("image",0);
//cvShowImage( "image", img0 );
/*cvSetMouseCallback( "image", on_mouse, 0 );*/
/*for(;;)
{
int c = cvWaitKey(0);
if( (char)c == 27 )
break;
if( (char)c == 'r' )
{
cvCopy( img0, img);
cvShowImage( "image", img );
}
}*/
//for(int i = 0; i < seq->total; i ++ )
// {
// CvPoint* r1 = (CvPoint*)cvGetSeqElem( seq, i );
// cvCircle(img1,cvPoint(r1->x,r1->y),1,cvScalar(0,255,0),1,8,0);
// }
//cvNamedWindow("img1",0);
//cvShowImage( "img1", img1 );
CvMemStorage* pStorage = cvCreateMemStorage(0);
CvSeq* seq_cur = NULL;
seq_cur = cvCreateSeq( 0, sizeof(CvSeq), sizeof(CvPoint), pStorage);
CvPoint pt;
for (int i = 0; i < 10; i++)
{
pt.x = 100;
pt.y = 105;
cvSeqPush( seq_cur, (&pt));//为什么这句话老是出错,查看了对应的值也的确不正确,应该怎样正确的把点信息推到seq里面?
}
CvPoint* r1 = (CvPoint*)cvGetSeqElem( seq_cur, 0 );
cvCircle(img1,cvPoint(r1->x,r1->y),10,cvScalar(0,255,0),1,8,0);

cvShowImage( "img1", img1 );
cvWaitKey(0);
自己可以试试
opencv 中能不能用cvSeqPush()加入CvPoint2D32f元素,怎么加?

CvSeq* pointSeq = cvCreateSeq(C笭敞蒂缎郦等垫劝叮滑V_32FC2, sizeof(CvSeq), sizeof(CvPoint2D32f), storage);for (i = 0; i &lt; xCoord.size(); i ){ //添加点 tempNode.x = xCoord.at(i);tempNode.y = yCoord.at(i);cvSeqPush(pointSeq, &amp;tempNode);} ...

cvHaarDetectObjects 的实现请教高手

新分配的内存缓冲区(或显示的通过 cvMemStorageAlloc 函数分配,或隐示的通过 cvSeqPush, cvGraphAddEdge等高级函数分配)总是起始于当前块(即top块)的剩余那部分,如果剩余那部分能满足要求(够分配的大小)。分配后,free_space 就减少了新分配的那部分内存大小,外加一些用来保存适当列型的附加大小。当top块的剩余空...

如何提取轮廓上每个点的坐标

cvSeqPush(allpointsSeq,&amp;pt);} cvPolyLine(image,&amp;points,&amp;onetourlength,1,0,CV_RGB(0,255,0),2,8,0);}

rects.push_back是什么

rects:矩形;push:推;back [英][bæk][美][bæk]n.背,背部; 背面,反面; 后面,后部; (椅子等的)靠背;vt.使后退; 支持; 加背书于; 下赌注于;vi.后退; 倒退;adj.背部的; 后面的; 以前的; 拖欠的;adv.以前; 向后地;第三人称单数:backs过去分词:backed复数:backs...

在计算double vv=cvArcLength(o,CV_WHOLE_SEQ,0);不合法的序列类型,为 ...

include&lt;highgui.h&gt; include&lt;iostream&gt; using namespace std;int main(){ IplImage *p=cvLoadImage

如何用OpenCV训练自己的分类器

由于haarTraining训练的时候需要输入的正样本是vec文件,所以需要使用createsamples程序来将正样本转换为vec文件。打开OpenCV安装目录下bin文件夹里面的名为createSamples(新版本的OpenCV里面改名为opencv_createSamples)的可执行程序。需要提醒的是,该程序应该通过命令行启动(可以参考我的另一篇博客:http://blog...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
HP4411S 笔记本触摸屏无反应 dnf赛丽亚的物品合成怎么用 劳力士蓝游艇适合搭配什么风格的表带? 我想在一电脑上同时开两个或者多个用户名怎么做,,求助高手~~! 女孩子自考什么专业好 女生自考什么专业含金量高 清华自强计划招生通过了是不是就可以被录取? 清华自强计划好通过吗? 清华大学自强计划过了笔试有分加吗? 20以内的质数加上1还是质数的数有()。 伯牙鼓琴,志在明月,钟子期曰:“善哉.” 伯牙鼓琴,志在清风,钟子期曰:“善哉.” 新浪体育直播的问题 为什么体育台直播大厅看不了直播 在华佗临床各症验方中关于高血脂症的有哪些? 在华佗临床各症验方中关于胆石症的有哪些? 在华佗临床各症验方中关于先兆流产的有哪些? 电台节目华佗首乌方是真的吗? 什么软件可以把AWB格式转换为MP3 成都锦城学院历年毕业时间 静安区中海万锦城2期6号楼9层面试有人去过没有啊,是不是真的 地铁6号线陆肖站至五至五号线锦城湖站怎么走? 四川大学锦城学院 2012年3月6号在官网公布了消息 在四川省是二本招生 以... 上海市静安区太阳山路中海万锦城二期6号楼908座广告传媒有限公司 请问 上海虹桥高铁站到静安区太阳山路中海万锦城二期6号楼9 中央空调内机被楼上的水漏了还能用吗 我的世界皮肤为什么不能显示 跪求海贼王同人漫画。 我的世界里自定义皮肤别人看不到是为什么? 我的世界,为什么自定义皮肤用不了了 求海贼王同人漫画 急~~! 与opencv有关C++程序解释问题 微信账单多次刷脸不通过怎么办 vba createobject函数 报错 EXCEL VBA 的问题? excel vba 解读 eXceL关于vBA 江福海撞脸什么狗 这个好像在甄嬛传里见过? 《后宫甄嬛传》中江福海的扮演者叫刘洋,但是百度百科的“刘洋”词条中有许多人,不知道究竟哪一个是他 后宫甄嬛传里面皇后身边的太监叫什么 甄嬛传里为什么感觉江福海很好看 父母爱情江福海最后的官职 竟不得半亩方塘为安身立命之地 安字的意思 青海藏语春节联欢晚会歌单 初级学习电脑,大家有没有好的学习视频,推荐推荐,谢谢^ω^ 有没有电脑基础知识之类的学习视频,或者免费学习 狗生锈毛虫吃什么药 小狗生了绣毛虫 狗长锈毛虫,满身的毛都掉了,还有伤痕 狗狗耳道上有一个像毛毛虫一样的白色虫子是怎么回事?
  • 焦点

最新推荐

猜你喜欢

热门推荐