Ответ 1
Насколько я знаю, OpenCV не имеет класса const_Mat. Однако, используя
const float awesome_data[24] = {0};
const cv::Mat awesome_mat = cv::Mat(6, 4, CV_32F, const_cast<float *>(awesome_data));
вы сохраняете константу.
Обычно, если мои данные не являются константами, я могу инициализировать заголовок cv:: Mat поверх него для алгебраической манипуляции.
float awesome_data[24] = {0};
cv::Mat awesome_mat = cv::Mat(6, 4, CV_32F, awesome_data);
Но если мои данные const
const float awesome_data[24] = {0};
cv::Mat awesome_mat = cv::Mat(6, 4, CV_32F, awesome_data);
будет иметь ошибку: unable to convert from const void * to void *
. Я знаю, что я не буду изменять awesome_mat, что это лучший способ сделать это?
В настоящее время я должен выполнить const cast
const float awesome_data[24] = {0};
cv::Mat awesome_mat = cv::Mat(6, 4, CV_32F, const_cast<float *>(awesome_data));
Насколько я знаю, OpenCV не имеет класса const_Mat. Однако, используя
const float awesome_data[24] = {0};
const cv::Mat awesome_mat = cv::Mat(6, 4, CV_32F, const_cast<float *>(awesome_data));
вы сохраняете константу.
Данные в cv::Mat
всегда могут быть изменены. Чтобы быть более безопасным, вы должны скопировать данные:
const float awesome_data[24] = {0};
cv::Mat awesome_mat = cv::Mat(6, 4, CV_32F, const_cast<float *>(awesome_data)).clone();
С const cv::Mat
только заголовок матрицы только для чтения, но не данные (Различия в использовании "const cv:: Mat &" , "cv:: Mat &" , cv:: Mat & ", ", cv:: Mat" или "const cv:: Mat" в качестве функциональных параметров?):
const cv::Mat mat = cv::Mat::zeros(6, 4, CV_32F);
mat += 1; // compiles and runs fine!
Я могу ввести его без const cast как:
const float awesome_data[24] = {0};
Mat awesome_mat = Mat(6, 4, CV_32F, (void*)awesome_data,0);