我正在使用vtkImageImport
从 opencv 矩阵转换为vtkImageData
.
vtkImageData* convertImage(const cv::Mat& image)
{
int width = image.cols;
int height = image.rows;
vtkSmartPointer<vtkImageImport> importer = vtkSmartPointer<vtkImageImport>::New();
importer->SetDataScalarTypeToUnsignedChar();
importer->SetImportVoidPointer(image.data);
importer->SetWholeExtent(0,width-1,0, height-1, 0, 0);
importer->SetDataExtentToWholeExtent();
importer->Update();
return importer->GetOutput();
}
关于在进行这种导入时如何管理指针和内存,我有 2 个问题。
- 导入器是否为创建的vtkImageData创建并分配新的数据指针,以便在opencv矩阵被销毁时不影响vtk图像。
- 一旦导入器被销毁,返回的 vtkImageData* 是否仍然有效,或者我应该返回一个智能指针以保持引用计数 > 0?我的理由是,如果导入器在内部对 vtkImageData 使用智能指针,那么图像将在导入器被销毁时被销毁。VTK 示例始终在与随后使用数据的范围相同的范围内使用导入器。
谢谢