C++ 将轮廓向量传递给矩()与将带有轮廓的图像传递给矩()比较

C++ 将轮廓向量传递给矩()与将带有轮廓的图像传递给矩()比较,c++,opencv,contour,C++,Opencv,Contour,我想得到包含在二值图像中的每个符号的描述符,这样我就可以用支持向量机进行训练/预测。我想我需要找到图像中每个符号的轮廓,然后提取每个描述符(每个轮廓对应一个描述符)。我使用huMoments获取符号的描述符,为此我需要符号的矩 函数moments()将图像作为Mat对象或点向量接收。这意味着我可以传递一个由contours()返回的点向量,以及一个我在其中绘制和填充特定轮廓的二进制图像。所以我的问题是: 使用contours()返回的向量作为参数得到的力矩与使用绘制轮廓的图像得到的力矩之间有什么

我想得到包含在二值图像中的每个符号的描述符,这样我就可以用支持向量机进行训练/预测。我想我需要找到图像中每个符号的轮廓,然后提取每个描述符(每个轮廓对应一个描述符)。我使用
huMoments
获取符号的描述符,为此我需要符号的矩

函数
moments()
将图像作为
Mat
对象或点向量接收。这意味着我可以传递一个由
contours()
返回的点向量,以及一个我在其中绘制和填充特定轮廓的二进制图像。所以我的问题是:

使用
contours()
返回的向量作为参数得到的力矩与使用绘制轮廓的图像得到的力矩之间有什么区别吗?就精度而言,一个选项比另一个更好吗

例子: 假设我从
等高线()
得到的点向量是这样的(这是一个示例,不是函数计算的真实点):

如果我在
Mat
中绘制由点矢量形成的轮廓,然后填充内部,我会得到如下图像:


我的问题是,第二张图像的
矩()
在SVM学习/预测时是否比点向量(第一张图像)带来更多信息,从而提高预测的准确性?

使用轮廓,您将只获得边界点,而矩是在所有(也是内部)点上计算的。所以这取决于你的二进制图像,但一般来说,它们是不一样的。您可以使用
findNonZero
将所有非黑色像素获取到一个向量中。示例图像A和代码片段将有助于获得更精确的答案。@Miki用示例编辑了问题结果将有所不同,对您的svm是好是坏取决于您。