VTK GetScalarPointer() and GetScalarComponentAsFloat() not work

I am using VTK 5.10.1 with VS 2010, and the following example does not work on my machine:

http://www.vtk.org/Wiki/VTK/Examples/Cxx/ImageData/IterateImageData

The erros said:

vtkImageData [009B92A8]: Bad component index 1302176011

I am not sure why this happened, and it should work since it is from the official document. However, the reality is that it does not work on my machine, neither GetScalarComponentAsFloat() or GetScalarComponentAsDouble() will work.

So if we want to get the pixel data from vtkImageData, we need to find another way to do it. And we can get the data by accessing vtkDataArray, please see the following example code:

#include <vtkVersion.h>
#include <vtkSmartPointer.h>
#include <vtkImageData.h>
#include <vtkPointData.h>
#include "vtkBMPReader.h"

int main(int, char *[])
{
    char * filename = "img.bmp";
    if( !filename  || strlen(filename) == 0 )
    {
        return -1;
    }

    vtkBMPReader * reader = vtkBMPReader::New();
    reader->SetFileName(filename);
    reader->Update();

    vtkSmartPointer<vtkImageData> image_data = reader->GetOutput();

    int* dims = image_data->GetDimensions();
    std::cout << "Dims: " << " x: " << dims[0] << " y: " << dims[1] << " z: " << dims[2] << std::endl;
    std::cout << "Number of points: " << image_data->GetNumberOfPoints() << std::endl;
    std::cout << "Number of cells: " << image_data->GetNumberOfCells() << std::endl;
    std::cout << "Number of scalar components: " << image_data->GetNumberOfScalarComponents() << std::endl;

    vtkDataArray *arr = image_data->GetPointData()->GetArray(0);

    // Retrieve the entries from the image data and print them to the screen
    for (int z = 0; z < dims[2]; z++)
    {
        for (int y = 0; y < dims[1]; y++)
        {
            for (int x = 0; x < dims[0]; x++)
            {
                /* Change this
                double* pixel = static_cast<double*>(imageData->GetScalarPointer(x,y,z));
                // do something with v
                std::cout << pixel[0] << " ";
                */
                double d[3];
                arr->GetTuple(y * dims[0] + x, d);
                std::cout << d[0] << " ";
            }
            std::cout << std::endl;
        }
        std::cout << std::endl;
    }

    return EXIT_SUCCESS;
}
时间: 2024-12-31 18:00:12

VTK GetScalarPointer() and GetScalarComponentAsFloat() not work的相关文章

VTK 6.1 安装配置

安装可以参考http://blog.csdn.net/jasonleesjtu/article/details/8211692 过程大致一样. VTK 6.1 相对于VTK 5 在目录结构方面有很大的改动,很多lib文件的名字都换掉了.所以配置部分按上文无法成功.此时可以借助CMake配置文件. cmake_minimum_required(VERSION 2.8.5 FATAL_ERROR) project(Cylinder) find_package(VTK REQUIRED) includ

第04章-VTK基础(7)

[译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8),由于时间关系,我们不能保证每周都能更新本书内容,但尽量做到一周更新一篇到两篇内容.敬请期待^_^.欢迎转载,另请转载时注明本文出处,谢谢合作!同时,由于译者水平有限,出错之处在所难免,欢迎指出订正!] [本小节内容对应原书的第83页至第87页] 4.16 动画 动画是可视化等系统的重要模块: 通过

第04章-VTK基础(5)

[译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8),由于时间关系,我们不能保证每周都能更新本书内容,但尽量做到一周更新一篇到两篇内容.敬请期待^_^.欢迎转载,另请转载时注明本文出处,谢谢合作!同时,由于译者水平有限,出错之处在所难免,欢迎指出订正!] [本小节内容对应原书的第63页至第70页] 4.11 文本标注 VTK提供了两种方法用于标注图像

第02章-VTK安装(2)

[译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8),由于时间关系,我们不能保证每周都能更新本书内容,但尽量做到一周更新一篇到两篇内容.敬请期待^_^.欢迎转载,另请转载时注明本文出处,谢谢合作!同时,由于译者水平有限,出错之处在所难免,欢迎指出订正!] 2.3Windows XP, Vista及以上版本平台下安装VTK Windows平台下有两种安

VTK开发--错误集锦

1.文字未显示: 现象:在VTK中使用vtkTextActor或vtkActor2D类显示文字,结果文字未显示出来: 解决方法:在程序上方加上 VTK_MODULE_INIT( vtkRenderingFreeType ) 2.编译出现错误:no override found for '...' 解决方法:在程序上方加上 #include <vtkAutoInit.h> VTK_MODULE_INIT( vtkRenderingOpenGL );

VTK生成项目是出现无法解析的外部符号的解决办法

当你VTk所有目录和链接库加入到属性页中后,或许还会遇见一个让人头疼的问题: 这是为什么呢? 大部分新手可能都是在配置完毕后亟不可待地在网上找了一段测试代码就进行测试,并没有考虑测试代码之中的陷阱.然后就出现了这个问题. 其实这个问题的原因就在程序开头两句: #define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL,vtkRenderingOpen

第03章-VTK系统概述(1)

[译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8),由于时间关系,我们不能保证每周都能更新本书内容,但尽量做到一周更新一篇到两篇内容.敬请期待^_^.欢迎转载,另请转载时注明本文出处,谢谢合作!同时,由于译者水平有限,出错之处在所难免,欢迎指出订正!] 本章旨在介绍VTK系统的总体概述,并讲解运用C++.Java.Tcl和Python等语言进行VT

VTK 5.10.1 VS2010 Configuration 配置

Download VTK 5.10.1 Download VS2010 Download CMake 3.2.0 I assume you've already installed VS2010 and CMake 3.2.0 correctly. Compile the VTK: Start CMake 3.2.0, fill the source and destination: source: C:/VTK5.10.1/VTK5.10.1 destination: C:/VTK5.10.1

PyQt下VTK窗口创建

# QVTKRenderWindowInteractor要求必须有初始化好的parent def CreateScene(self, parent): view = QVTKRenderWindowInteractor(parent) renderer = vtkRenderer() view.GetRenderWindow().AddRenderer(renderer) renderer.SetBackground(1,1, 1) view.GetRenderWindow().Render()