TIFF文件读取为cv::Mat导入到vtkImageData使程序崩溃(Qt C++)

TIFF file read as cv::Mat imported to vtkImageData makes program crash (Qt C++)

提问人:Manju C Babu 提问时间:11/8/2023 更新时间:11/8/2023 访问量:15

问:

我正在使用 opencv 将 CLAHE 应用于灰度图像,然后使用 vtk 进行更远的处理。这曾经适用于 RAW 图像。但是,当对 TIFF 图像进行相同的尝试时,无法对导入的 vtk 数据执行任何操作。

尝试了其他方法,例如将图像读取为 QFile(就像对 RAW 所做的那样)并转换为 opencv 的无符号 char* 数据输入。还尝试以 QImage 身份读取,但出现相同的错误。使用C++循环将vtkImageData转换为Mat,如某些帖子所示,确实会减慢程序的速度。代码如下。

vtkNew<vtkTIFFReader> tiffReader;
tiffReader->SetFileName(filenameDispRaw.toLocal8Bit().constData()); 
// filenameDispRaw will contain tiff image file path, in case raw file is absent
tiffReader->Update();

vtkImageData *tiffImage = vtkImageData::New();
tiffImage = tiffReader->GetOutput();
double ImageWidth = tiffImage->GetDimensions()[0];
double ImageHeight = tiffImage->GetDimensions()[1];

cv::Mat test(ImageHeight, ImageWidth, CV_16UC1);    //, data);
test = cv::imread(filenameDispRaw.toStdString(), CV_16UC1); // directly reading tiff as Mat

cv::Mat inv_tif;
bitwise_not(test, inv_tif);

cv::Ptr<cv::CLAHE> clahe_tif = cv::createCLAHE(histoThreshold, cv::Size(histoTile1,histoTile2));
cv::Mat dst_tif;
clahe_tif->apply(inv_tif, dst_tif);

vtkNew<vtkImageImport> imageImport;
imageImport->SetDataSpacing(1, 1, 1);
imageImport->SetDataOrigin(0, 0, 0);
imageImport->SetWholeExtent(0, ImageWidth -1, 0, ImageHeight - 1, 0, 0);
imageImport->SetDataExtentToWholeExtent();
imageImport->SetDataScalarTypeToUnsignedShort();
imageImport->SetNumberOfScalarComponents(1);
imageImport->SetImportVoidPointer(dst_tif.data);
imageImport->Update();

vtkImageData *imgdataEnhance=vtkImageData::New();
imgdataEnhance = imageImport->GetOutput();

程序在以下行中崩溃:

double min = imgdataEnhance->GetScalarRange()[0];
double max = imgdataEnhance->GetScalarRange()[1];

完成 CLAHE 非常重要。我完全被困在这一点上,并希望社区成员提供任何改进或替代方法来完成这项工作。请帮忙

C++ opencv qt-creator

评论


答: 暂无答案