繁体   English   中英

如何在OpenCV中创建一维Mat并将所有条目初始化为零?

[英]How do I create a 1-D mat in OpenCV and initialize all the entries to zero?

以下代码似乎无效。 这里有一个类似的问题, 如何在OpenCV中用零填充矩阵? 但是,我想要一维垫子,而不是此链接中提到的二维垫子。

int histSize = 8;
Mat colorHist;

for (int i = 0; i < (histSize * histSize * histSize); i++)
    colorHist.at<float>(i) = 0.0;

您可以尝试类似的方法:

1-首先,创建一个float数组,它是您的一维数据结构:

float arr[10] = {0}; // initialize it to all 0`s

2-现在按如下所示创建您的opencv矩阵,并将数组填充到其中:

cv::Mat colorHist = cv::Mat(2, 4, CV_32F, arr);

3-如果您要访问单个条目,请使用以下命令:

for(int i=0; i<10; i++) {
    colorHist.at<float>(0,i);
}

其中, i是您想要的条目索引,范围是from 0 to 9

要不就:

colorHist.at<float>(0,2);

如果您需要单独。 在这里,我们获得的索引为2的条目将返回0 ,因为矩阵在该点全为零。

编辑:正如尼古拉斯建议的那样:

cv::Mat colorHist = cv::Mat::zeros(1, 10, CV_32F); // size=10

如果您不想处理浮点数组,这是创建全零的一维行矩阵的一种较短方法(贷记给尼古拉斯)。 访问当然是:

for(int i=0; i<10; i++) {
    colorHist.at<float>(i);
}

希望有帮助!

在您发布的代码中,您尚未将Mat初始化为任何大小或类型。 但是,有一种非常简单的方法可以用零初始化矩阵。

将Matrix值初始化为0:

cv::Mat colorHist = cv::Mat::zeros(1, histSize, CV_32F);

这将产生带有histSize列的行向量(一维), CV_32F仅引用矩阵正在处理的数据类型(在这种情况下为float )。

如果您想使用列向量,则只需交换尺寸即可:

cv::Mat colorHist = cv::Mat::zeros(histSize, 1, CV_32F);

访问元素:

for(int i = 0; i < histSize; i++)
    float c = colorHist.at<float>(i);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM