我在将 Image 对象(使用 Point Grej FlyCapture2 SDK 捕获)传递给 QImage 对象时遇到了问题。我通过函数获得与图像数据相关联的指针:
virtual unsigned char* FlyCapture2::GetData ( )
然后通过以下方式加载数据:
QImage::QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )
两个 Image 对象的数据格式均为 8 位单色。BytesPerLine 参数应该等于图像的宽度(我已经通过将 FlyCapture2::Image 保存到 .bmp 然后将其加载到 QImage 来检查它)。
您认为问题是从 unsigned char* 转换为 uchar* 吗?你还有其他建议吗?逐像素复制图像太慢了。
编辑:我正在将 FlyCapture 捕获的图像转换为FlyCapture2::PIXEL_FORMAT_RGB8
,其中:R = G = B = 8 位,在PGR::SnapShot()
函数内。SnapShot() 返回unsigned char
* 常量。这是我的 Qt 显示功能的一部分:
unsigned char *const img = PGRSystem->SnapShot();
QImage Img(img, 1024, 768, QImage::Format_RGB888);
QGraphicsScene *Scene = new QGraphicsScene();
Scene->addPixmap(QPixmap::fromImage(Img));
ui.ImageView->setScene(Scene);
ui.ImageView->fitInView(ui.ImageView->itemAt(100,100));
delete [] Scene;
我也尝试将 Img 保存到文件中,但随后出现未处理的异常。我尝试了其他像素格式对(FlyCapture2::PIXEL_FORMAT_RGB
- 24 bit RGB with QImage::RGB88
8 and FlyCapture2::PIXEL_FORMAT_RGBU32
with QImage::RGB32
)
还值得一提的是,我正在使用的 QImage 构造函数没有设置 colorTable(检查 QImage 是否为灰度时出现异常)。我想我需要更多帮助。