gpt4 book ai didi

c++ - OpenCV 序列——如何创建点对序列?

转载 作者:IT老高 更新时间:2023-10-28 12:46:13 25 4
gpt4 key购买 nike

我正在尝试在 OpenCV 中创建一个空序列 (CvSeq),其结构类似于由返回的序列,例如 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);

但是查看可用于创建 CvSeq 的标志,我找不到任何可以用来构造其元素为点对的序列的东西。我想以与访问从霍夫变换获得的行相同的方式访问我创建的序列的元素:

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

...

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

...
}

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

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

非常感谢大家的帮助!

编辑:找到解决方案。

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

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

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

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

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

最佳答案

在寻找解决方案以提供帮助 20 分钟后,我阅读了整个问题并找到了解决方案编辑。 复制并粘贴,以便从未回答的中找出这个问题。

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

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

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

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

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

关于c++ - OpenCV 序列——如何创建点对序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6984994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com