Image processing 将文本渲染为ITK图像

Image processing 将文本渲染为ITK图像,image-processing,itk,Image Processing,Itk,是否可以在不包含VTK的情况下将文本渲染到ITK图像?我想做的是将一些标签打印到图像中,而不必添加这个巨大的VTK库 我找到的唯一解决方案是使用Freetype和VTK来实现这一点 //Properties of the Text vtkSmartPointer<vtkTextProperty> textPropertyRegion = vtkSmartPointer<vtkTextProperty>::New(); textPropertyRegion-&g

是否可以在不包含VTK的情况下将文本渲染到ITK图像?我想做的是将一些标签打印到图像中,而不必添加这个巨大的VTK库

我找到的唯一解决方案是使用Freetype和VTK来实现这一点

//Properties of the Text  
vtkSmartPointer<vtkTextProperty> textPropertyRegion = vtkSmartPointer<vtkTextProperty>::New();
    textPropertyRegion->SetColor(1.0, 1.0, 1.0);
    textPropertyRegion->SetFontSize(36);
    textPropertyRegion->SetJustificationToCentered();
    textPropertyRegion->SetBold(1);
//Renders the Text 
vtkSmartPointer<vtkFreeTypeUtilities> freeType = vtkSmartPointer<vtkFreeTypeUtilities>::New();
//The text will be temporarily rendered into this image
vtkSmartPointer<vtkImageData> textImage = vtkSmartPointer<vtkImageData>::New();
    freeType->RenderString(textPropertyRegion, vtkStdString("TEXT"), textImage );
int* featureImageDims = featureImage->GetDimensions();
// Set every pixel of the rendered Text Image into the main Image
for (int y = 0; y < featureImageDims[1]; y++) {
    for (int x = 0; x < featureImageDims[0]; x++) {

        unsigned char *valueText = static_cast<unsigned char*>(featureImage->GetScalarPointer(x, featureImageDims[1] - 1 - y, 0));

        itk::Image<short,2>::IndexType idx;
        idx.SetElement(0, x + 1200);
        idx.SetElement(1, y + 1000);

        RGBPixelType pix;
        pix.fill(valueText[0]);
        it.SetIndex(idx);
        it.Set(pix);
    }
}
//文本的属性
vtksmartpointerTextPropertyRegion=vtkSmartPointer::New();
textPropertyRegion->SetColor(1.0、1.0、1.0);
textPropertyRegion->SetFontSize(36);
textPropertyRegion->SetRightationCenter();
textPropertyRegion->SetBold(1);
//渲染文本
vtkSmartPointer freeType=vtkSmartPointer::New();
//文本将临时渲染到此图像中
vtkSmartPointer textImage=vtkSmartPointer::New();
freeType->RenderString(textPropertyRegion,vtkStdString(“TEXT”),textImage);
int*featureImageDims=featureImage->GetDimensions();
//将渲染文本图像的每个像素设置为主图像
对于(int y=0;yGetScalarPointer(x,featureImageDims[1]-1-y,0));
itk::Image::IndexType idx;
idx.SetElement(0,x+1200);
idx.SetElement(1,y+1000);
RGBPixelType pix;
pix.fill(valueText[0]);
it.SetIndex(idx);
it.Set(pix);
}
}

这是可行的,但是:重构非常糟糕,我需要为任务添加两个额外的库来呈现字符串并将其放入图像中。有一个更简单的解决方案吗?

没有VTK是可能的,但我担心单用ITK是不可能的。你知道没有VTK我怎么做吗?OpenCV,如果它更吸引人的话,有一些。在Windows中,GDI随时可用。。。