gpt4 book ai didi

c++ - 如何将 cv::Mat 转换为 vtkImageData?

转载 作者:太空狗 更新时间:2023-10-29 22:55:28 25 4
gpt4 key购买 nike

如何在 C++ 中将 cv::Mat 高效地转换为 vtkImageData?我正在寻找一种适用于 BW 和 COLOR 图像的方法。

最佳答案

以下是@lucasahli 上述答案的简化版本。它使用高效的 memcpy 而不是双 for 循环。

注意:对于彩色图像,您可能需要将图像 channel 从 bgr 翻转为 rgb 顺序,我使用了 mixChannels实现。

vtkSmartPointer<vtkImageData> OpenCVToVtkConverter::convertCVMatToVtkImageData(const cv::Mat &sourceCVImage, bool flipOverXAxis) {
vtkSmartPointer<vtkImageData> outputVtkImage = vtkSmartPointer<vtkImageData>::New();

int numOfChannels = sourceCVImage.channels();

// dimension set to 1 for z since it's 2D
outputVtkImage->SetDimensions(sourceCVImage.cols, sourceCVImage.rows, 1);

// NOTE: if your image isn't uchar for some reason you'll need to change this type
outputVtkImage->AllocateScalars(VTK_UNSIGNED_CHAR, numOfChannels);

// the flipped image data gets put into tempCVImage
cv::Mat tempCVImage;
if(flipOverXAxis){ // Normally you should flip the image!
cv::flip(sourceCVImage, tempCVImage, 0);
}
else {
tempCVImage = sourceCVImage;
}

// the number of byes in the cv::Mat, assuming the data type is uchar
size_t byte_count = sourceCVImage.cols * sourceCVImage.rows * numOfChannels * sizeof(unsigned char);

// copy the internal cv::Mat data into the vtkImageData pointer
memcpy(outputVtkImage->GetScalarPointer(), tempCVImage.data, byte_count);

outputVtkImage->Modified();
return outputVtkImage;
}

关于c++ - 如何将 cv::Mat 转换为 vtkImageData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51931411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com