我正在尝试在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变换的输出一样访问序列。
答案 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变换的输出一样访问序列。