Как мне создать 1-D мат в OpenCV и инициализировать все записи на ноль?

Следующий фрагмент кода не работает. Здесь есть похожий вопрос Как заполнить Матрицу нулями в OpenCV? но я хочу 1-D коврик, а не 2-D коврик, как упомянуто в этой ссылке.

int histSize = 8;
Mat colorHist;

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

-1

Решение

Вы можете попробовать что-то вроде этого:

1 — Сначала вы создаете массив с плавающей точкой, который является вашей 1-D структурой данных:

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);
}

Надеюсь, это поможет!

2

Другие решения

В коде, который вы разместили, вы не инициализировали коврик любого размера или типа. Однако существует очень простой способ инициализации матрицы нулями.

Инициализация значений матрицы до 0:

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

Это создаст вектор строки (1-мерный) с 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);
2

По вопросам рекламы [email protected]