我正在裁剪一个opencv Mat:
cv::Size size = img.size();
cv::Rect roi(size.width*/4., size.height/4.,size.width/2., size.height/.2);
img= img(roi);
然后我使用img.data
指针创建一个vtkImageData
(通过vtkImageImport
):
vtkSmartPointer<vtkImageImport> importer = vtkSmartPointer<vtkImageImport>::New();
importer->SetImportVoidPointer(img.data);
...
importer->Update();
vtkImageData* vtkImg = importer->GetOutput();
当我显示 vtkImg 时,我没有得到预期的结果。我已经深入研究了opencv的代码,问题是在创建裁剪数据时,opencv不会分配一个小4倍的新指针,而是保留相同的已分配块,将指针向前推进并将新img
变量标记为不连续的。因此,我的 vtk 图像仍然从原始未裁剪的 Mat 中导入数据。我知道我可以将完整图像导入 vtkImageData,然后使用 vtk 过滤器进行裁剪,但我不希望这样做。
opencv 有没有办法获得“物理”裁剪的裁剪图像(使用新分配的数据指针)?
谢谢