有可能有一个cv :: Mat包含指向标量而不是标量的指针吗?

时间:2014-03-06 08:42:56

标签: c++ opencv computer-vision

我试图在VTK(3D可视化库)和OpenCV(图像处理库)之间架起桥梁。

目前,我正在做以下事情:

vtkWindowToImageFiltervtkRenderWindow(场景)转换为vtkImageData(渲染窗口的像素)。

然后我必须将vtkImageData的每个像素复制到cv::Mat中,以便使用OpenCV进行处理和显示。

此过程需要实时运行,因此冗余副本(ImageDataMat的场景像素)会严重影响性能。我想直接从场景像素映射到cv::Mat

随着场景的变化,我希望cv::Mat自动引用场景。基本上,我想要cv::Mat<uchar *>,而不是cv::Mat<uchar>。那有意义吗?还是我过度复杂了?

1 个答案:

答案 0 :(得分:1)

vtkSmartPointer<vtkImageData> image = vtkSmartPointer<vtkImageData>::New();

int dims[3];
image->GetImageData()->GetDimensions(dims);
cv::Mat matImage(cv::Size(dims[0], dims[1]), CV_8UC3, image->GetImageData()->GetScalarPointer());`

我成功地将vtkimagedata*直接实现到cv::Mat指针数组..

某些功能如  cv::flipmatImage -= cv::Scalar(255,0,0)

直接处理vtkimagedata。

cv::resizecv::Canny等功能不起作用。