VTKPNGWriter打印黑色图像
VTKPNGWriter printing out black images?
我正在使用ITK进行一些图像处理,然后使用VTK以。png格式打印结果,但是输出图像始终是黑色的。
目前,我正在使用itk::ImagetoVTKImageFilter(在我的代码中定义为ITKtoVTKFilterType)将itk::Image转换为vtk::vtkImageData。
ITKtoVTKFilterType::Pointer itk2vtkGray = ITKtoVTKFilterType::New();
itk2vtkGray->SetInput(grayBinary); //grayBinary is of type itk::Image<unsigned short, 2>
itk2vtkGray->Update();
vtkSmartPointer<vtkImageData> grayVTK = vtkSmartPointer<vtkImageData>::New();
grayVTK->SetExtent(extent);
grayVTK->SetSpacing(m_spacing);
grayVTK->SetScalarTypeToUnsignedShort();
grayVTK->SetNumberOfScalarComponents(1);
grayVTK->AllocateScalars();
grayVTK->DeepCopy(static_cast<vtkImageData*>(itk2vtkGray->GetOutput()));
//grayVTK = itk2vtkGray->GetOutput();
我甚至已经确认我的VTK ImageData包含255或0的值使用以下代码。
int *dims = grayVTK->GetDimensions();
std::cout << "Dims: " << " x: " << dims[0] << " y: " << dims[1] << " z: " << dims[2] << std::endl;
std::cout << "Number of points: " << grayVTK->GetNumberOfPoints() << std::endl;
std::cout << "Number of cells: " << grayVTK->GetNumberOfCells() << std::endl;
for (int y = 0; y < dims[1]; y++)
{
for (int x = 0; x < dims[0]; x++)
{
unsigned short *pixel = static_cast<unsigned short*>(grayVTK->GetScalarPointer(x,y,0));
std::cout << "PIXEL LOC/VAL "<< y*dims[0] + x << " " << pixel[0] <<std::endl;
}
std::cout << std::endl;
}
然后我继续执行ImageCast以确保数据的类型为unsignedShort。
vtkSmartPointer<vtkImageCast> cast2 = vtkSmartPointer<vtkImageCast>::New();
cast2->SetInput(grayVTK);
cast2->SetOutputScalarTypeToUnsignedShort();
cast2->ClampOverflowOn();
cast2->Update();
然后最后我使用vtkPNGwriter输出。png文件。注意,我已经尝试输出实际的vtkImageData以及来自ImageCastFilter的输出。
vtkSmartPointer<vtkPNGWriter> writer =
vtkSmartPointer<vtkPNGWriter>::New();
writer->SetFileName(filename.toStdString().c_str());
writer->SetInputConnection(cast2->GetOutputPort());
//writer->SetInput(grayVTK); I have tried to method as well but to no success
writer->Write();
但是,.png输出总是黑色的。有谁知道我做错了什么吗?
对于将来的参考,似乎许多PNG阅读器不显示16位数据。因此,我在最后对unsigned short进行的强制转换应该是char.
vtkSmartPointer<vtkImageCast> cast2 = vtkSmartPointer<vtkImageCast>::New();
cast2->SetInput(grayVTK);
cast2->SetOutputScalarTypeToChar();
cast2->ClampOverflowOn();
cast2->Update();
相关文章:
- 具有 GPU 时间表的卤化物产生黑色图像
- openCV中的Absdiff可以编译,但显示黑色图像
- 在图像上的矩形区域之外填充黑色
- 具有SPI_SETDESKWALLPAPER功能的程序仅在尝试使用C++将其更改为图像时将桌面背景更改为黑色
- OpenCv 3.3 Cuda 中值过滤器生成 2/3 的图像黑色
- OPENCV :: CUDA GPUMAT CV_8UC1至CV_32FC1转换黑色图像
- OpenCV,Dlib - 作为黑色图像输出的垫子对象
- 从C++中的屏幕选择创建位图时的黑色图像
- 屏幕截图仅返回黑色图像
- 在C++中,在图像周围填充黑色边框是最有效的方法
- 在opencv中使用imwrite保存图像时,会将图像全部写入黑色,但imshow会正确显示
- 从HWND获取并保存位图(每个像素8,4,1位-黑色图像)
- OpenCV Sobel过滤器导致几乎完全黑色的图像
- OpenGL 窗口的捕获图像在 Win7 下为黑色
- OpenCV 项目在将直方图应用于黑色图像时崩溃
- 黑色背景,图像在中心使用 GDI
- 如果新图像中的原始像素为黑色,则Qt绘制一个蓝色像素
- SDL产生黑色图像
- 我正在尝试将灰度转换为更大的黑色图像.我得到这个错误OpenCV错误:断言失败
- 在黑色图像上叠加精明的边缘