我可以提供对OpenCV矩阵的只读访问吗?
Can I provide readonly access to an OpenCV matrix?
我有一个类,它结合了许多OpenCV的cv::Mat
矩阵。
是否可以同时提供允许客户端读取但不写入底层数据的const访问器和允许客户端读取和写入数据的非const访问器?
我正在考虑这样做:
class MyClass {
cv::Mat a;
public:
cv::Mat a() { return a; }
const cv::Mat& a() const { return a; }
};
但是这会保护底层数据不被const访问器修改吗?或者它只是保护cv::Mat的头数据?
如果您被迫提供对cv::Mat
对象本身的访问,那么您就不走运了。即使在const cv::Mat
上,也可以通过data
指针访问数据。因此,代码:
const cv::Mat test = cv::Mat::ones(3, 3, CV_8UC1);
test.data[3] = 4;
将编译并执行。
但是,如果您只需要提供对数据的访问,那么您可以向cv::Mat::begin()
和cv::Mat::end()
提供包装器函数,它们允许对const cv::Mat
进行只读访问:
class MyClass
{
cv::Mat a;
public:
cv::MatIterator_<uchar> begin() {return a.begin<uchar>();}
cv::MatConstIterator_<uchar> begin() const {return a.begin<uchar>();}
cv::MatIterator_<uchar> end() {return a.end<uchar>();}
cv::MatConstIterator_<uchar> end() const {return a.end<uchar>();}
};
MyClass m;
const MyClass& mref = m;
auto it = mref.begin();
*it = 4; //Compile error here
在本例中,我使用uchar
作为数据类型,但是让它们沿着模板参数传递是很容易的。
相关文章:
- 访问OpenCV GpuMat频道
- 如何将"mean_file_proto"读入OpenCV Mat,以便从平均值中减去图像以在Caffe模型中使用?
- 访问 openCV 中某个图像中所有像素的 RGB 值
- 以numpy/Python的风格访问OpenCV和C++中的矩阵元素
- 如何访问OpenCV中UDEV与UDEV相关的网络摄像头
- 如何访问OpenCV匹配器上的点位置
- 访问 opencv 矩阵CV_32S元素
- 为什么我无法访问 openCV 中的矩阵元素?
- 多读访问一个std::map,将导致不安全的行为
- 访问OpenCV中的Mat二进制图像元素
- 尝试访问 OpenCV 中的像素值时出错
- 快速像素访问 opencv
- 访问OpenCV中灰度图像的像素值
- cvCreateCameraCapture无法访问OpenCV 3.0相机
- c++ LinkedList读访问冲突错误
- 在Lua中跟踪变量以进行读访问,以启动用户定义的c++方法/函数
- c++ Vector读访问冲突Mylast返回0x8
- 这个读访问违反异常是由什么引起的?
- 访问OpenCV中每个单独的通道
- 访问OpenCV Mat中的多个通道