提问人:Manju C Babu 提问时间:11/8/2023 更新时间:11/8/2023 访问量:15
TIFF文件读取为cv::Mat导入到vtkImageData使程序崩溃(Qt C++)
TIFF file read as cv::Mat imported to vtkImageData makes program crash (Qt C++)
问:
我正在使用 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 非常重要。我完全被困在这一点上,并希望社区成员提供任何改进或替代方法来完成这项工作。请帮忙
答: 暂无答案
评论