osg::Image image转换成cv::Mat image
时间: 2023-06-30 21:26:27 浏览: 174
CvvImage类Mat版
4星 · 用户满意度95%
将 `osg::Image` 转换成 `cv::Mat` 可以通过以下步骤实现:
1. 获取 `osg::Image` 的像素数据和图像参数,包括宽度、高度、颜色通道数、数据类型等;
```cpp
unsigned char* data = image->data();
int width = image->s();
int height = image->t();
int channels = image->pixelSizeInBits() / 8;
GLenum dataType = image->getDataType();
```
2. 创建一个 `cv::Mat` 对象,为其分配内存空间,使用上面获取到的图像参数;
```cpp
cv::Mat cvImage(height, width, CV_MAKETYPE(dataType, channels));
```
3. 将 `osg::Image` 的像素数据拷贝到 `cv::Mat` 中;
```cpp
memcpy(cvImage.data, data, height * width * channels);
```
完整代码示例:
```cpp
osg::ref_ptr<osg::Image> osgImage = ...;
unsigned char* data = osgImage->data();
int width = osgImage->s();
int height = osgImage->t();
int channels = osgImage->pixelSizeInBits() / 8;
GLenum dataType = osgImage->getDataType();
cv::Mat cvImage(height, width, CV_MAKETYPE(dataType, channels));
memcpy(cvImage.data, data, height * width * channels);
```
阅读全文