如何将RAW文件(3D图像)转换为STL格式
How to convert RAW file (3D image) to STL format?
我开始了一个c++程序,它可以打开RAW的3D图像并保存它。
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();
有人有想法吗?
当我需要操作 3D 文件时,我使用 PCL 库或 VTK 库。对于您的问题,我认为VTK是更好的选择,因为它包含一些用于Raw 3D和STL的驱动程序。
看看这个例子,它将告诉你如何打开一个.原始文件此示例将向您展示如何编写 STL 文件。
如果你不想使用第三方库,我将无法帮助你......
相关文章:
- 如何使用 STL 算法将整数向量转换为字符串向量?
- 如何在<typename> <long> 不更改给定代码的情况下将自定义向量与 STL 向量相互转换?
- 将 STL 模型转换为 OSG 格式
- C 中STL结构的类型转换
- STL标准::转换
- C++ STL 包含器到 Glib 转换
- 如何使用STL将结构的矢量转换为映射
- 如何将RAW文件(3D图像)转换为STL格式
- 将STL列表转换为二进制搜索树递归模板
- 将 STL unicode 字符串转换为 wxString 会给出空字符串
- 将 STL 映射转换为结构
- 如何将列表 STL 的迭代器转换为实例 (C++)
- 在 STL 堆栈和双端格式之间进行转换
- gdb:将内存地址强制转换为 STL 对象
- c++,stl.将具有rgb颜色的字符串转换为3个int值
- STL 和 Hana 元组之间的转换
- STL错误将VS 6项目转换为VS2010
- 使用std::begin()、std::end()将ArrayXd转换为stl向量,
- stl中是否有任何函数可以进行字符串转换,但带有长度参数
- C++在使用转换(STL)时出错