C++ 如何在OpenCV中创建1-D mat并将所有条目初始化为零?

C++ 如何在OpenCV中创建1-D mat并将所有条目初始化为零?,c++,opencv,matrix,initialization,opencv-mat,C++,Opencv,Matrix,Initialization,Opencv Mat,下面的代码似乎不起作用。这里有一个类似的问题,但是,我想要一个1-D的垫子,而不是这个链接中提到的2-D垫子 int histSize = 8; Mat colorHist; for (int i = 0; i < (histSize * histSize * histSize); i++) colorHist.at<float>(i) = 0.0; int histSize=8; 色谱仪; 对于(int i=0;i

下面的代码似乎不起作用。这里有一个类似的问题,但是,我想要一个1-D的垫子,而不是这个链接中提到的2-D垫子

int histSize = 8;
Mat colorHist;

for (int i = 0; i < (histSize * histSize * histSize); i++)
    colorHist.at<float>(i) = 0.0;
int histSize=8;
色谱仪;
对于(int i=0;i<(histSize*histSize*histSize);i++)
在(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);
}
如果你需要单独。这里我们得到了索引为
2
的条目,它当然会返回
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);
}

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

将矩阵值初始化为0: 这将产生一个列为
histSize
的行向量(一维),
CV_32F
仅指矩阵正在处理的数据类型(
float

如果希望使用列向量,只需交换尺寸:

cv::Mat colorHist = cv::Mat::zeros(histSize, 1, CV_32F);
访问元素:
for(int i=0;i
你能一部分一部分地解释一下吗?还有,我如何访问元素?谢谢。尼古拉斯,这是非常优雅的解决方案。谢谢!
cv::Mat colorHist = cv::Mat::zeros(1, histSize, CV_32F);
cv::Mat colorHist = cv::Mat::zeros(histSize, 1, CV_32F);
for(int i = 0; i < histSize; i++)
    float c = colorHist.at<float>(i);