我试着将peak::ipl::Image转换为cv::Mat,但没有找到方法。
本课题是用 C++ 实现的。
while(true){
// Get buffer from device's DataStream. Wait 5000 ms. The buffer is automatically locked until it is queued again.
const auto buffer = dataStream->WaitForFinishedBuffer(5000);
const auto image = peak::ipl::Image(peak::BufferTo<peak::ipl::Image>(buffer));
const auto imageProcessed = image.ConvertTo(peak::ipl::PixelFormatName::BGRa8,peak::ipl::ConversionMode::Fast);
//Convert
//cv::Mat imageMat = imageProcessed???
// Queue buffer again
dataStream->QueueBuffer(buffer);
}
IDS peak为QImage提供了一个例子,但对我来说没用。
我试过把image.Data()传递给构造函数,但是ilp::Image和uint 8_t * 一起工作,opencv和uchar* 一起工作。
我知道QImage工作得很好,但我不想包括它只捕捉图像,然后将其转换为垫。
另外,我还搜索了一个方法来将ids buffer直接转换为cv::Mat,但是没有任何结果。
1条答案
按热度按时间3htmauhk1#
要指定Mat矩阵的总大小,应该将newImage.total()乘以newImage.elemSize()。如果要将图像转换为peak::ipl::PixelSize Name::BGRa8,则创建的图像(cv::Mat)的大小应该是原始缓冲区的四倍。
此外,可以先创建ipl::Image,然后将数据传递给Mat构造函数: