【发布时间】:2011-04-13 19:40:44
【问题描述】:
通常,如果我的数据是非常量的,我可以在它上面初始化一个 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));
【问题讨论】:
-
你想达到什么目的?
-
如果对象是 cv::Mat,我可以执行任何线性代数、图像处理等操作。我不能用它做什么? :-)
-
我不是那个意思。 const_cast 有效 - 还有其他您想要或期望的东西吗?
-
@fazo:一点也不。 const_cast 在语义上是错误的。通过抛弃 constness,您移除了防止您意外更改数据的保护层。
-
没有 cv::Mat 构造函数可以让你传递一个 const 指针,所以不,这是不可能的。也没有特殊的 const_Mat...