3

在 OpenCV 内置示例中,它在图像上找到正方形,所有轮廓都存储在向量中。
如何根据数学向量运算处理这些点。为了计算这些轮廓点之间的简单 versors,我必须将它们转换为 Vec2d,所以我可以使用“norm”函数:

Vec2d PointTOVec2d(Point q){
return Vec2d(q.x,q.y);
}

void main(){
vector<cv::Point> square=SomeFunctionCalculatingSquarePoints(); 
Vec2d v1;
v1=PointTOVec2d(square[1]-square[0]);
v1=v1/norm(v1);
}

但即使采用这种方式,我似乎也无法找到一种方法(通过显式函数)来计算 Vec2d 的简单幅度。

那么如何在 OpenCV 中将点作为数学向量处理,我是否必须自己编写所有内容,还是我错过了一些非常重要的 OpenCV 数学特性/方式/类来处理它们?

4

1 回答 1

1

cv::norm()已经可以操作cv::Point了。cv::Vec2d如果您不想,则无需转换为:

cv::Point pt(3,4);
double n1 = cv::norm(pt);   // Result is 5

cv::Vec2d v(3,4);
double n2 = cv::norm(v);    // Result is 5
于 2013-07-24T14:52:05.047 回答