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

pen*_*ope 29 c++ opencv

我正在尝试创建一个空序列(CvSeq),OpenCV其结构类似于返回的序列,例如,cvHoughLines2(当用于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); 
Run Code Online (Sandbox Code Playgroud)

但是看着可用于创建的标志CvSeq我找不到任何可用于构造其元素为点对的序列.我想访问我创建的序列的元素,就像我访问从Hough Transform获得的行一样:

for (int i=0; i < mylines->total; ++i){
    CvPoint *line = (CvPoint *)cvGetSeqElem(mylines, i);

    ...

    ... line[0].x ...
    ... line[1].y ... 

    ...
}
Run Code Online (Sandbox Code Playgroud)

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

这个问题的原因是我已经在一个函数CvSeq返回的行上运行了一个非常复杂的cvHoughLines2()函数,我想在图片中创建的一些任意行上使用它(测试目的等等) .我已经到处寻找类似问题的答案,但找不到任何东西...... :(

非常感谢你的帮助!

编辑:找到了解决方案.

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

CvMemStorage *memStorage = cvCreateMemStorage(0);
CvSeq* seq = cvCreateSeq(0, sizeof(CvSeq), sizeof(CvPoint)*2, memStorage);
Run Code Online (Sandbox Code Playgroud)

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

CvPoint points[2];
... (initialize the points) ...
cvSeqPush(seq, &points);
Run Code Online (Sandbox Code Playgroud)

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

rob*_*les 8

在寻找解决方案20分钟后,我阅读了整个问题并找到了解决方案编辑.复制并粘贴,以便从无人接听的问题中获取此问题.

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

CvMemStorage *memStorage = cvCreateMemStorage(0);
CvSeq* seq = cvCreateSeq(0, sizeof(CvSeq), sizeof(CvPoint)*2, memStorage);
Run Code Online (Sandbox Code Playgroud)

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

CvPoint points[2];
... (initialize the points) ...
cvSeqPush(seq, &points);
Run Code Online (Sandbox Code Playgroud)

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