创建柱状图
Create histogram
本文关键字:创建 更新时间:2023-10-16
我有一个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|%fn", dPixel[0], dPixel[1], dPixel[2]);
}
}
}
但我总是得到0.0…
我有两个问题:- 为什么我从GetScalarPointer得到0.0值?
- 我是在正确的方式,以创建一个直方图从vtkDICOMImageReader ?我没有看到类似的东西……
谢谢。
注:下面是我加载vtlDICOMImageReader的代码:
if(NULL == m_pDICOMReader)
{
m_pDICOMReader = vtkDICOMReader::New();
}
if(! m_pDICOMReader->CanReadFile(lpszPathName))
{
AfxMessageBox(_T("Can not read / parse the file."), MB_ICONERROR);
return FALSE;
}
m_pDICOMReader->SetFileNames(p);
m_pDICOMReader->Update();
where 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|%fn", dPixel[0], dPixel[1], dPixel[2]);
}
}
}
但是给我一些奇怪的值:
-6277438562204192500000000000000000000000000000000000000000000000000.000000|-6277438562204192500000000000000000000000000000000000000000000000000.000000|-6277438562204192500000000000000000000000000000000000000000000000000.000000
为什么?此外,我尝试了另一种vtk类型:VTK_SHORT,相同的结果…
注:我试过了:
m_pDICOMReader->SetFileNames(p);
m_pDICOMReader->GetOutput()->AllocateScalars(VTK_DOUBLE, 1);
m_pDICOMReader->Update();
使用AllocateScalars让我在查看器上一无所获(既不是2D图像,也不是音量)…所以,我做了一些东西(没有使用AllocateScalars):
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|%dn", chPixel[0], chPixel[1], chPixel[2]);
}
}
}
嗯,这里我得到了一些值,但是这些循环花费的时间太长了…嗯…很奇怪,但说实话,循环是与前面的代码(double* dPixel = static_cast(m_pDICOMReader…))同时进行的。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 链接到自行创建的dll失败
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++类内存结构中创建"spacer"?
- 终端不会为C++文件创建.exe文件吗
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息