将vtkImageData复制到cv :: Mat

scap3y

我正在尝试将vtkImageData *类复制到cv :: Mat结构中[我的目标是将MHD文件读入OpenCV]。该文件本质上是3D矩阵,所以我想获得一个包含所有切片的向量。卷。到目前为止,我已经提出了这段代码,

reader->SetFileName(INPUT_DATA_1.c_str());
reader->Update();
imageData_1 = reader->GetOutput();
extractVOI->SetInput(imageData_1);

int dims[3];
imageData_1->GetDimensions(dims);
extractVOI->SetVOI(0, dims[0], 0, dims[1], 75, 75); // Set it to z=75
extractVOI->GetOutput()->SetScalarTypeToSignedChar();
imageExport->SetInputConnection(extractVOI->GetOutputPort());
imageExport->Update();

cv::Mat cvMat_test(dims[0], dims[1], CV_8UC1, imageExport->GetPointerToData());

尽管这是可行的,但并没有给我带来预期的输出(在下面突出显示)。有关此问题的任何帮助将非常有帮助。

在此先感谢,Sarthak

预期输出

预期输出

我现在得到的输出,

实际输出

编辑:我意识到图像是不一样的大小。这是因为我刚刚从正在使用的查看器中发布了数据快照。.在保管箱链接中提供了一个示例,此处为希望这能使事情更清楚。

标签:vtk opencv网桥,vtkopencv,vtk opencv集成

scap3y

好的,所以直接在上使用的一个GetPointerToData()或多个GetScalarPointer()函数vtkImageData不适合分配(至少不适合我确定的方式)。所以,我设计了另一种方法,

reader->SetFileName(INPUT_DATA_1.c_str());
reader->Update();
imageData_1 = reader->GetOutput();
extractVOI->SetInput(imageData_1);

int dims[3];
imageData_1->GetDimensions(dims);
extractVOI->SetVOI(0, dims[0], 0, dims[1], 75, 75); // Set it to z=75
extractVOI->GetOutput()->SetScalarTypeToSignedChar();
cv::Mat cvMat_test(dims[0], dims[1], CV_8UC1);

for (int i=0; i<dims[0]; ++i) {
    for (int j=0; j<dims[1]; ++j) {
        cvMat_test.at<unsigned char>(cv::Point(j,i)) = *static_cast<unsigned char*>(extractVOI->GetOutput()->GetScalarPointer(i,j,vol_dim));
    }
}

我猜想这种方法可以很容易地扩展到包括整个体积。

编辑:

我伸出我的代码做的转换和从vtkImageDataCV ::垫和/或CV :: GPU ::垫..我已经上传的代码在这里vtkOpenCVBridge

干杯。!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将cv :: Mat的底部复制到另一个cv :: Mat

来自分类Dev

为什么将cv :: Mat的列复制到向量中失败?

来自分类Dev

将cv :: Mat向量复制到float向量的最佳方法是什么?

来自分类Dev

将cv :: Mat复制到另一个将创建“断言失败0 <= _colRange.start && ..”

来自分类Dev

无需从其他 OpenCV 矩阵复制到 cv::Mat 和 cv::UMat 的数据分配

来自分类Dev

使用memcpy将OpenCV Mat复制到已知地址

来自分类Dev

将轮廓点的向量复制到 Mat 中

来自分类Dev

如何将 Mat 的矩形区域复制到相同大小的新 Mat?

来自分类Dev

OpenCV-将CUDA设备数据复制到GPU Mat中

来自分类Dev

将Vector <float>中的数据复制到Vector <Mat>(Opencv / C ++)

来自分类Dev

cv :: Mat和arma :: mat之间的转换

来自分类Dev

从cv :: Mat转换为arma :: mat

来自分类Dev

Visual Studio 2010 OpenCV多线程Mat不会复制到另一个Mat

来自分类Dev

openCV cv :: mat版本

来自分类Dev

读取数据cv :: Mat

来自分类Dev

比较2 cv :: Mat

来自分类Dev

将cv :: Mat转换为MTLTexture

来自分类Dev

将cv :: Mat转换为ipcMatrix <ipcRGB>

来自分类Dev

将cv :: Mat转换为openni :: VideoFrameRef

来自分类Dev

将OGRE :: Image转换为cv :: Mat

来自分类Dev

将cv :: Mat转换为openni :: VideoFrameRef

来自分类Dev

将一个cv :: Mat推入另一个将要复制吗?

来自分类Dev

c++14 中从“const std::vector<cv::Mat>*”到“std::vector<cv::Mat>*”的无效转换

来自分类Dev

无法从'cv :: Mat *'转换为'const cv :: Mat'

来自分类Dev

如何在vector <cv :: Mat>中找到相同的cv :: Mat

来自分类Dev

查找cv :: Mat的字节大小

来自分类Dev

cv :: Mat每个元素逆

来自分类Dev

打开CV Mat结构坐标

来自分类Dev

如何将 cv::Scalar 分配给 cv::Mat?

Related 相关文章

热门标签

归档