从灰度图像到QImage的快速转换
Fast conversion from gray level image to QImage
在应用程序中,我处理的图像中每个像素要么是无符号的,要么是浮点数,每个值都是具有给定灰度级别的像素。我有可用的资源,因此我可以自由访问图像的数据。
我需要使用 qt 框架显示/保存和加载这些图片。目前,处理转换的唯一方法是获取并设置每个像素,这被证明有点慢。
还有其他方法可以转换这些图像吗?
与其使用 QImage::setPixel,不如直接访问图像缓冲区。
使用所需的格式、宽度和高度创建图像后,可以使用 QImage::bits() 访问内存缓冲区,也可以使用 QImage::scanLine() 检索指向图像中每行开头的指针,并直接在内存中设置像素:这比为每个像素调用 setPixel() 要快得多。
QImage
有一个构造函数,该构造函数采用指向现有缓冲区/图像的指针:
QImage ( uchar * data, int width, int height, Format format )
它不拥有缓冲区的所有权,也不复制内容,因此您有责任确保缓冲区在QImage
的整个生命周期内有效。
注意:QImage
需要 32 位对齐的图像行,因此您可能需要将图像行复制到具有适当填充的新缓冲区中。您只有无符号或浮点数像素,因此它不适用于您(已经是 32 位值),但请记住这一点,如果您将来有不同的像素类型。
相关文章:
- 将 cv::mat 转换为 QImage
- Qt-工作线程崩溃时将cv::Mat转换为QImage
- Qt - 将空指针(原始数据)转换为 QImage 并将其显示在标签上
- 警告在将 OpenCV 垫映像投射到 QImage 时使用旧式转换
- 将 QImage 转换为字符*
- 将qimage*转换为void*,反之亦然
- 如何将 QImage 中的像素数据转换为其他格式
- 将命令行参数转换为qimage
- 与iMread相比,qimage to cv ::垫子转换了奇怪的行为
- 如何将灰度/二进制垫子转换为qimage
- 在CV :: MAT和Qimage之间进行转换会使程序崩溃
- 将Qimage转换为cvMat 64FC3格式
- 如何将 QImage 转换为 opencv Mat
- QImage转换返回null
- 将IplImage IPL_DEPTH_32S转换为QImage Format_RGB32的最快方法
- 将 uint16 dicom 映像转换为 qimage
- 从灰度图像到QImage的快速转换
- 将 QVideoFrame 转换为 QImage
- 使用 QImage::loadFromData 将 cv::mat 转换为 QImage
- Qt5转换QImage到OpenGL格式