【问题标题】:ITKImageToCVMat returns white imageITKImageToCVMat 返回白色图像
【发布时间】:2016-08-01 09:05:08
【问题描述】:

我现在正在使用 ITK 库进行图像注册。我用 OpenCV 读取源图像,然后将它们转换为 ITKImage;注册后,我将结果转换为 CVMat 并使用 imwrite 进行存储。

但是,ITKOmageToCVMat 总是给出一个白色的图像(由 imshow 显示),并且在 imwrite 之后,结果不会存储在文件夹中。太奇怪了……

下面是我的代码:

cv::Mat img1 = imread(argv[1], IMREAD_GRAYSCALE);
cv::Mat img2 = imread(argv[2], IMREAD_GRAYSCALE);

typedef float  PixelType;
const unsigned int Dimension = 2;
typedef itk::Image< PixelType, Dimension > FixedImageType;
typedef itk::Image< PixelType, Dimension > MovingImageType;
typedef itk::OpenCVImageBridge BridgeType;
FixedImageType::Pointer fixedImage = BridgeType::CVMatToITKImage<FixedImageType>(img1);
MovingImageType::Pointer movingImage = BridgeType::CVMatToITKImage<MovingImageType>(img2);

Mat img3 = itk::OpenCVImageBridge::ITKImageToCVMat<MovingImageType>(movingImage);
display("moving image", img3);
string filename3 = "img3";
imwrite(filename3, img3);

即使没有注册,只需将图像从 CVMat 转换为 ITKImage,然后再转换回来,它不起作用....您有什么想法吗?谢谢你:)

【问题讨论】:

    标签: opencv itk image-registration


    【解决方案1】:

    您的代码几乎没问题,它应该可以工作,但您必须考虑两件事。一个是您的图像类型。当您从硬盘读取图像时,“uchar”类型的像素值介于 0 和 255 之间,但您将 ITK 的图像定义为浮点类型 { typedef float PixelType; },因此当您将它们转换回 cv::Mat 时,它们是仍然是浮动的,但它们的值大于 1(0~255),并且“imshow”命令的浮动图像的最大值必须为“1”,因此您只需将图像划分为 255: imshow("moving image", img3/255);

    第二个问题是文件名:string filename3 = "img3"; 你要确定图片的保存格式,比如string filename3 = "img3.bmp";

    【讨论】:

      猜你喜欢
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多