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;
}

本文转自博客园Grandyang的博客,原文链接:VTK GetScalarPointer() and GetScalarComponentAsFloat() not work,如需转载请自行联系原博主。

相关文章
|
开发工具 git
解决Git push提交时Permission denied(publickey).Could not read from remote...的问题
解决Git push提交时Permission denied(publickey).Could not read from remote...的问题
928 0
|
消息中间件 大数据 Kafka
kafka线上问题:rebalance
小米探讨了Kafka消费组重平衡问题,这是大数据领域的一大挑战,特别是在大规模集群中。重平衡因组成员增减、主题数量变化或分区数变化触发,可能使Kafka短暂不可用,影响TPS。解决办法包括调整超时时间、心跳频率和拉取间隔以减少重平衡频率和影响。了解触发原因和机制,以及实施优化策略,对于提升Kafka集群的稳定性和性能至关重要。
870 0
kafka线上问题:rebalance
|
数据安全/隐私保护 容器
Portainer 安装及简单初步使用1
Portainer 安装及简单初步使用1
339 0
|
算法 网络协议 Java
双非本科跨专业5面京东,8600小时后收到通知,流下喜悦泪水
自身情况: 1、本科双非,硕士211,均不是计算机相关专业。 2、研究生期间从事的科研项目,材料方向,没有java或者其它编程相关的项目。 3、本科参加比赛较多,电子设计大赛,大学生数学竞赛等,没有程序相关的比赛经历。 4、由于身边的人大多数从事程序员行业,自己其实也很纠结,于是疫情期间(2020年4月份)开始零基础看Java,由于个人原因,5、6月份也没怎么学习,断断续续刷了点题(真后悔5、6月份没好好刷题)。还狠狠地梳理了一遍知识体系
|
存储 关系型数据库 MySQL
详解 Mysql 分布式事务 XA(跨数据库事务)
详解 Mysql 分布式事务 XA(跨数据库事务)
|
Java Maven 应用服务中间件
java.lang.ClassNotFoundException: javax.servlet.Filter
java.lang.ClassNotFoundException: javax.servlet.Filter:有两个原因:(1)在maven中的作用域,不能是provided,需要是compile就是默认的scope(2)spring-boot-starter-tomcat的版本bug,换个新的或旧...
8084 0
|
存储 文字识别 Oracle
|
21小时前
|
云安全 人工智能 自然语言处理