私はopencvマットを切り取っています:
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 イメージは元のクロップされていないマットからデータをインポートします。画像全体を vtkImageData にインポートしてから、vtk フィルターでトリミングできることはわかっていますが、そうしないほうがよいでしょう。
「物理的に」トリミングされたトリミングされた画像を取得するopencvを使用する方法はありますか(新しく割り当てられたデータポインターを使用)?
ありがとうございました