- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我现在正在使用 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,然后再转换回来,它不起作用....你有什么想法吗?谢谢:)
最佳答案
您的代码几乎没问题,应该可以工作,但您必须考虑两件事。一个是你的图像类型。当您从硬盘读取图像时,“uchar”类型的像素值在 0 到 255 之间,但您将 ITK 的图像定义为浮点类型 { typedef float PixelType; }
,所以当你将它们转换回 cv::Mat 时,它们仍然是 float ,但它们的值大于 1 (0~255) 并且是“imshow”命令的浮点图像的最大值,必须是“1”,所以你只需要将图像分成 255: imshow("动态图像", img3/255);
第二个问题是文件名:string filename3 = "img3";
你必须确定要保存的图像的格式,比如 string filename3 = "img3.bmp";
关于opencv - ITKImageToCVMat 返回白色图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38694845/
我现在正在使用 ITK 库进行图像配准。我用 OpenCV 读取源图像,然后将它们转换为 ITKImage;注册后,我将结果转换为 CVMat 并使用 imwrite 存储它。 但是,ITKOMage
我是一名优秀的程序员,十分优秀!