当前位置: 首页 > 知识库问答 >
问题:

读取OpenCV Mat 16bit到QImage 8bit灰度

苍恩
2023-03-14
  1. 文件:TIFF,2页,灰度,16位

我想读取16位Tiff,然后将其转换为显示为8位。

void ImgProc::Load_Image_2xTiff_16bit_G(Mat *Mat_A_in, Mat *Mat_B_in, string file_name)
{  
    vector<Mat> vec_Mat;
    vec_Mat.reserve(2);

    imreadmulti(file_name, vec_Mat);

    *Mat_A_in = vec_Mat[0];
    *Mat_B_in = vec_Mat[1];
}
void ImgProc::Convert_Mat16_2_QIm8(QImage *QIm_Out, Mat *Mat_In, double scale_factor)
{
    unsigned int rows = Mat_In->rows;
    unsigned int cols = Mat_In->cols;
    *QIm_Out = QImage(cols, rows, QImage::Format_Grayscale8);
    unsigned char* line_QIm;

    if (!Mat_In->data)
        return;

    for(unsigned int y = 0; y < rows; y++)
    {
        line_QIm = QIm_Out->scanLine(y);
        for(unsigned int x = 0; x < cols; x++)
        {
            line_QIm[x] = (unsigned char)(Mat_In->at<ushort>(y, x) * scale_factor);
        }
    }
}

当我使用Mat_In-

当我使用Mat_In-

我想我应该提一下,那个拍照的相机只使用了14位深度。


共有1个答案

郎喜
2023-03-14

我遇到了同样类型的问题。以下代码是我用来解决这种情况的解决方案。

   #include <opencv2/core.hpp>
   #include <opencv2/imgproc.hpp>
   #include <opencv2/highgui.hpp>

   #include <QImage>

    int main(void)
    {

      //Read the 16 bit per pixel image.
      cv::Mat I = cv::imread('16BitsPerPixelImage.tiff',cv::IMREAD_ANYDEPTH|cv::IMREAD_ANYCOLOR);

     //Convert from 16 bit per pixel to 8 bit per pixel using a min max normalization and store it a 8 bit per pixel.
     cv::normalize(I,I,0.,255.,cv::NORM_MINMAX,CV_8U);

    // Then actualy the easiest way to convert it to a QImage is to save a temporary file and open it using QT functions.
    // PNG use a compression without loss algorithm.
      cv::imwrite("/tmp/convert16to8.png",I);

      QImage QI;

      QI.load("/tmp/convert16to8.png");

      return EXIT_SUCCESS;
    }
 类似资料:
  • 以下程序演示如何将彩色图像读取为灰度并使用JavaFX窗口显示。 在这里通过将标志与带有彩色图像路径的字符串一起传递来读取图像。 假定以下是上述程序中指定的输入图像。那么输出结果应该为一个灰色的图片。

  • 问题内容: 我正在尝试直接读取黑白图像。 我最近将OpenCv版本更新为3.0.0-dev,以前使用的代码不再起作用。 适用于2.4,但不能用于新版本,因为没有field 。 有什么建议? 注意:我知道可以使用,但是我不喜欢在代码中使用未命名的常量。谢谢! 问题答案: 该标志已重命名为。一般来说,标志现在以与它们所引用的功能有关的方式为名称加上前缀。(例如,标记以,标记以等等开头)

  • 我有一个大问题,试图将一个大的科学图像(7MB)16位PNG图像转换为JPG,以便压缩它并检查Python中的任何最终工件。原始图像可在以下位置找到:https://postimg.cc/p5PQG8ry在这里阅读其他答案时,我尝试了枕头和OpenCV,但没有成功。我得到的唯一东西是一张白色的床单。我做错了什么?注释行是使用Python读取16位PNG图像文件的尝试,但似乎不适用于生成数据类型错误

  • 本文向大家介绍Python读取MRI并显示为灰度图像实例代码,包括了Python读取MRI并显示为灰度图像实例代码的使用技巧和注意事项,需要的朋友参考一下 本文实例主要关于Python实现读取MRI(核磁共振成像)为numpy数组,使用imshow显示为灰度。 代码如下: 脚本运行时间:(0分0.018秒) 结果展示: 总结 以上就是本文关于Python读取MRI并显示为灰度图像实例代码的全部内容

  • 首先,我尝试使用rawPicture回调,但总是得到空指针。 JpegCalback给出了not null byte[]数组,但是cvtColor转换不起作用。 我的预览回调如下 C++JNI函数: 我找到了一些答案,但都不起作用。 带有raw PicturecallBack的Android相机的格式是什么? 如何在OpenCV中将CV::Mat转换为灰度? OpenCV从缓冲区读取jpeg图像

  • 本文向大家介绍使用OpenCV python模块读取图像并将其另存为灰度系统,包括了使用OpenCV python模块读取图像并将其另存为灰度系统的使用技巧和注意事项,需要的朋友参考一下 在Python中,我们可以使用一个名为cv2的OpenCV库。Python不包含cv2,因此我们需要单独安装它。 对于Windows: 对于Linux: 在下面给出的程序中,我们使用以下三个功能: imread(