OpenCV序列 - 如何创建点对序列?

时间:2011-08-08 16:05:42

标签: c++ opencv

我正在尝试在CvSeq中创建一个空序列(OpenCV),其结构与返回的序列类似,例如cvHoughLines2(在{{1}中使用时) }) - 一系列点对。

我找到了一种方法来制作一系列(未连接的)点(我希望这对点序列是正确的):

CV_HOUGH_PROBABILISTIC

但是查看可用于创建CvMemStorage *memStorage = cvCreateMemStorage(0); CvSeq* seq = cvCreateSeq( CV_SEQ_FLAG_SIMPLE | CV_SEQ_KIND_SET | CV_SEQ_ELTYPE_POINT, sizeof(CvSeq), sizeof(CvPoint), memStorage); 的标志我找不到任何可用于构造其元素为点对的序列的东西。我想访问我创建的序列的元素,就像访问我从Hough变换得到的行一样:

CvSeq

另外,我如何以这样的顺序插入元素? :/

问题的原因是我已经在for (int i=0; i < mylines->total; ++i){ CvPoint *line = (CvPoint *)cvGetSeqElem(mylines, i); ... ... line[0].x ... ... line[1].y ... ... } 函数返回的CvSeq行上运行了相当复杂的函数,我想在任意行上使用它在图片中创建(测试目的等)。我一直在寻找类似问题的答案,但找不到任何东西...... :(

非常感谢你的帮助!

编辑:找到了解决方案。

看起来唯一需要做的就是完全省略标志,表明你不会使用任何预定义的类型(例如点),只需给出正确的序列组件大小:

cvHoughLines2()

我可以通过将指针传递给CvMemStorage *memStorage = cvCreateMemStorage(0); CvSeq* seq = cvCreateSeq(0, sizeof(CvSeq), sizeof(CvPoint)*2, memStorage); 函数的2点数组来添加到存储中:

push

这样我可以像访问Hough变换的输出一样访问序列。

1 个答案:

答案 0 :(得分:8)

在寻找解决方案20分钟后,我阅读了整个问题并找到了解决方案。 复制并粘贴,以便从未答复的中获取此问题。

看起来唯一需要做的就是完全省略标志,表明你不会使用任何预定义的类型(例如点数),只需给出合适的大小序列组件:

CvMemStorage *memStorage = cvCreateMemStorage(0);
CvSeq* seq = cvCreateSeq(0, sizeof(CvSeq), sizeof(CvPoint)*2, memStorage);

我可以通过将指针传递给push函数的两点数组来添加到存储中:

CvPoint points[2];
... (initialize the points) ...
cvSeqPush(seq, &points);

这样我可以像访问Hough变换的输出一样访问序列。