我正在尝试创建一个空序列(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变换输出一样访问序列.
在寻找解决方案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变换输出一样访问序列.