C++ 创建直方图

C++ 创建直方图,c++,3d,vtk,C++,3d,Vtk,我有一个vtkDICOMImageReader,我打算从中创建一个直方图,以便在我自己的CDialog上展开。这是我的审判: int* nDim = m_pDICOMReader->GetOutput()->GetDimensions(); for(int z = 0;z < nDim[2];++z) { for(int y = 0;y < nDim[1];++y) { for(int x= 0 ;x < nDim[0];++x)

我有一个vtkDICOMImageReader,我打算从中创建一个直方图,以便在我自己的CDialog上展开。这是我的审判:

int* nDim = m_pDICOMReader->GetOutput()->GetDimensions();
for(int z = 0;z < nDim[2];++z)
{
    for(int y = 0;y < nDim[1];++y)
    {
        for(int x= 0 ;x < nDim[0];++x)
        {
            double* dPixel = static_cast<double*>(m_pDICOMReader->GetOutput()->GetScalarPointer(x, y, z));
            TRACE("%f|%f|%f\n", dPixel[0], dPixel[1], dPixel[2]);
        }
    }
}
其中p id是dcm文件的字符串数组。。。m_pDICOMReader运行良好,因为屏幕上有音量,而且运行良好

是的,我做到了:

m_pDICOMReader->GetOutput()->AllocateScalars(VTK_DOUBLE, 1);
int* nDim = m_pDICOMReader->GetOutput()->GetDimensions();
for(int z = 0;z < nDim[2];++z)
{
    for(int y = 0;y < nDim[1];++y)
    {
        for(int x= 0 ;x < nDim[0];++x)
        {
            double* dPixel = static_cast<double*>(m_pDICOMReader->GetOutput()->GetScalarPointer(x, y, z));
            TRACE("%f|%f|%f\n", dPixel[0], dPixel[1], dPixel[2]);
        }
    }
}
为什么??另外,我尝试了另一种vtk类型:vtk_SHORT,同样的结果

附言。 我试着这样做:

            m_pDICOMReader->SetFileNames(p);
            m_pDICOMReader->GetOutput()->AllocateScalars(VTK_DOUBLE, 1);
            m_pDICOMReader->Update();
结果是0,0,0

使用AllocateScalars无法在查看器上获取任何内容(既不是2D图像,也不是卷)。。。因此,我做了一些事情(没有使用AllocateScalars):

int*nDim=m_pDICOMReader->GetOutput()->GetDimensions();
对于(intz=0;zGetOutput()->GetScalarPointer(x,y,z));
跟踪(“%d |%d |%d\n”、chPixel[0]、chPixel[1]、chPixel[2]);
}
}
}

这里我得到了一些值,但问题是这些循环花费的时间太长。。。隐马尔可夫模型。。。奇怪,但老实说,循环与以前的代码(double*dPixel=static_cast(m_pDICOMReader…)是同时进行的。

您能显示加载和初始化
m_pDICOMReader的完整代码吗?
。当然。在一分钟内…我想你必须用
imageData->AllocateScalars(VTK_DOUBLE,1)来分配它们GetScalarPointer
访问它们之前,请参见非常好的一点!非常感谢。
-6277438562204192500000000000000000000000000000000000000000000000000.000000|-6277438562204192500000000000000000000000000000000000000000000000000.000000|-6277438562204192500000000000000000000000000000000000000000000000000.000000
            m_pDICOMReader->SetFileNames(p);
            m_pDICOMReader->GetOutput()->AllocateScalars(VTK_DOUBLE, 1);
            m_pDICOMReader->Update();
int* nDim = m_pDICOMReader->GetOutput()->GetDimensions();
for(int z = 0;z < nDim[2];++z)
{
    for(int y = 0;y < nDim[1];++y)
    {
        for(int x= 0 ;x < nDim[0];++x)
        {
            unsigned char* chPixel = reinterpret_cast<unsigned char*>(m_pDICOMReader->GetOutput()->GetScalarPointer(x, y, z));
            TRACE("%d|%d|%d\n", chPixel[0], chPixel[1], chPixel[2]);
        }
    }
}