gpt4 book ai didi

c++ - 如何将 RAW 文件(3D 图像)转换为 STL 格式?

转载 作者:行者123 更新时间:2023-11-30 05:46:14 25 4
gpt4 key购买 nike

我开始了一个可以打开 RAW 3D 图像并保存它的 c++ 程序。

CProjet::CProjet(int L,int C, int P, char* pimage) {

NBL=L;
NBC=C;
NBP=P;
size=NBL*NBC*NBP;
if(pimage != NULL) {

m_pimage=new char[strlen(pimage)+1];
strcpy(m_pimage,pimage);

}
else if(size != 0) {

m_pimage=new char[size+1];

}
else {

m_pimage=NULL;

}

}

CProjet::~CProjet() {

if(m_pimage != NULL) {

delete m_pimage;
m_pimage = NULL;

}

}

void CProjet::LireImageRAW() {

char nom_image[256];
FILE * fic_image;

cout<<"Nom de l'image a ouvrir : ";
cin>>nom_image;

fic_image = fopen(nom_image,"rb");

if (fic_image == NULL)
{
cout<<"Erreur a l'ouverture de l'image ..."<<endl;
exit(0);
}
else
cout<<"Image ouverte avec succes ..."<<endl;

fread(m_pimage,1,size,fic_image);

fclose(fic_image);
}

void CProjet::EcrireImageRAW() {

char nom_image[256];
FILE * fic_image;

cout<<"Nom de l'image a ecrire : ";
cin>>nom_image;

fic_image = fopen(nom_image,"wb");

if (fic_image == NULL)
{
cout<<"Erreur a la creation de l'image ..."<<endl;
exit(0);
}
else
cout<<"Image créée avec succes ..."<<endl;

fwrite(m_pimage,1,size,fic_image);

fclose(fic_image);
}

但是,我想将这个 3D 图像保存为 STL 格式。

你有什么想法吗?

提前致谢。

最佳答案

谢谢您的回答。我可以得到一个结果!

然而,这并不是很好。当我将我的 3D 图像保存为 STL 格式或只是为了查看它时,我们可以看到它已被复制 4 次。

http://imageshack.com/a/img673/7050/Tw7kNs.png

我尝试了一些更改但没有成功。

//Read 3D RAW image
vtkImageReader *imgReader = vtkImageReader::New();
imgReader->SetFileDimensionality(3);
imgReader->SetFileName(IMG_FILE);
imgReader->SetNumberOfScalarComponents(1);
//imgReader->SetDataSpacing(1.0,1.0,1.0);
//imgReader->SetDataOrigin(-0.5,-0.5,-0.5);
imgReader->SetDataByteOrderToBigEndian();
imgReader->SetDataExtent(0,199,0,199,0,199);
imgReader->Update();

//Visualization
vtkContourFilter *contour = vtkContourFilter::New();
contour->SetInput(imgReader->GetOutput());
contour->SetValue(0,0);

vtkPolyDataMapper *volMapper = vtkPolyDataMapper::New();
volMapper->SetInput(contour->GetOutput());
volMapper->ScalarVisibilityOff();
vtkActor *volActor = vtkActor::New();
volActor->SetMapper(volMapper);

vtkRenderer *renderer = vtkRenderer::New();
vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer(renderer);
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);

renderer->AddActor(volActor);
renderer->SetBackground(1,1,1);
renWin->SetSize(200*3,200*3);

// interact with data
renWin->Render();
iren->Start();

//Write in STL
vtkTriangleFilter *triangle = vtkTriangleFilter::New();
triangle->SetInput(contour->GetOutput());
triangle->PassVertsOff();
triangle->PassLinesOff();

vtkQuadricDecimation *decimation = vtkQuadricDecimation::New();
decimation->SetInput(triangle->GetOutput());

vtkCleanPolyData *clean = vtkCleanPolyData::New();
clean->SetInput(triangle->GetOutput());

vtkTriangleFilter *triangle2 = vtkTriangleFilter::New();
triangle2->SetInput(clean->GetOutput());
triangle2->PassVertsOff();
triangle2->PassLinesOff();

vtkSTLWriter *writer = vtkSTLWriter::New();
writer->SetInput(triangle2->GetOutput());
writer->SetFileName("test.stl");
writer->Write();

有没有人有想法?

关于c++ - 如何将 RAW 文件(3D 图像)转换为 STL 格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29005000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com