如何在 OpenCV 中创建一维垫并将所有条目初始化为零?
How do I create a 1-D mat in OpenCV and initialize all the entries to zero?
下面这段代码似乎不起作用。这里有一个类似的问题 How to fill Matrix with zeros in OpenCV? 但是,我想要一个一维垫子,而不是这个 link 中提到的二维垫子。
int histSize = 8;
Mat colorHist;
for (int i = 0; i < (histSize * histSize * histSize); i++)
colorHist.at<float>(i) = 0.0;
您可以尝试类似的方法:
1 - 首先创建一个浮点数组,它是一维数据结构:
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
的条目,这当然会 return 0
因为矩阵在该点全为零。
编辑:正如尼古拉斯建议的那样:
cv::Mat colorHist = cv::Mat::zeros(1, 10, CV_32F); // size=10
如果您不想处理浮点数组, 是一种创建全为零的一维行矩阵的较短方法(归功于 Nicholas)。访问当然是:
for(int i=0; i<10; i++) {
colorHist.at<float>(i);
}
希望对您有所帮助!
在您发布的代码中,您没有将 Mat 初始化为任何大小或类型。但是,有一种非常简单的方法可以用零初始化矩阵。
正在将矩阵值初始化为 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);
下面这段代码似乎不起作用。这里有一个类似的问题 How to fill Matrix with zeros in OpenCV? 但是,我想要一个一维垫子,而不是这个 link 中提到的二维垫子。
int histSize = 8;
Mat colorHist;
for (int i = 0; i < (histSize * histSize * histSize); i++)
colorHist.at<float>(i) = 0.0;
您可以尝试类似的方法:
1 - 首先创建一个浮点数组,它是一维数据结构:
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
的条目,这当然会 return 0
因为矩阵在该点全为零。
编辑:正如尼古拉斯建议的那样:
cv::Mat colorHist = cv::Mat::zeros(1, 10, CV_32F); // size=10
如果您不想处理浮点数组,是一种创建全为零的一维行矩阵的较短方法(归功于 Nicholas)。访问当然是:
for(int i=0; i<10; i++) {
colorHist.at<float>(i);
}
希望对您有所帮助!
在您发布的代码中,您没有将 Mat 初始化为任何大小或类型。但是,有一种非常简单的方法可以用零初始化矩阵。
正在将矩阵值初始化为 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);