Opencv ITKImageToCVMat返回白色图像

Opencv ITKImageToCVMat返回白色图像,opencv,itk,image-registration,Opencv,Itk,Image Registration,我现在在ITK图书馆做图像注册。我用OpenCV读取源图像,然后将它们转换为ITKImage;注册后,我将结果转换为CVMat并使用imwrite存储它 但是,ITKOmageToCVMat始终提供白色图像(由imshow显示),并且在imwrite之后,结果不会存储在文件夹中。真奇怪 下面是我的代码: cv::Mat img1 = imread(argv[1], IMREAD_GRAYSCALE); cv::Mat img2 = imread(argv[2], IMREAD_GRAYSCALE

我现在在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);
cv::Mat img1=imread(argv[1],imread\u灰度);
cv::Mat img2=imread(argv[2],imread_灰度);
typedef浮点像素类型;
常量无符号整数维=2;
typedef itk::ImageFixedImageType;
typedef itk::ImageMovingImageType;
typedef-itk::OpenCVImageBridge-BridgeType;
FixedImageType::Pointer fixedImage=BridgeType::CVMatToITKImage(img1);
MovingImageType::Pointer movingImage=BridgeType::CVMatToITKImage(img2);
Mat img3=itk::OpenCVImageBridge::ITKImageToCVMat(移动图像);
显示(“运动图像”,img3);
字符串filename3=“img3”;
imwrite(文件名3,img3);

即使没有注册,只需将图像从CVMat转换为ITKImage,然后再转换回,它也不起作用。。。。你知道吗?谢谢你:

你的代码几乎是好的,它应该工作,但你必须考虑2件事。一个是你的图像类型。当您从硬盘读取图像时,“uchar”类型的像素值在0到255之间,但您在float type
{typedef float PixelType;}
中定义了ITK的图像,因此当您将它们转换回cv::Mat时,它们仍然是float,但它们的值大于1(0到255)和“imshow”命令的float图像的最大值,必须为“1”,因此您只需将图像分割为255:
imshow(“运动图像”,img3/255)

第二个问题是文件名:
stringfilename3=“img3”必须确定要保存的图像格式,如
stringfilename3=“img3.bmp”