gpt4 book ai didi

c++ - 读取 OpenCV Mat 16bit 到 QImage 8bit Greyscale

转载 作者:行者123 更新时间:2023-11-28 04:33:35 32 4
gpt4 key购买 nike

我想做什么

  1. 文件:TIFF,2 页,灰度,16 位
  2. OpenCV:2x Mat,灰度,16 位 (CV_16UC1)
  3. Qt:2x QImage,灰度,8 位 (Format_Greyscale8)

我想读取一个 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->at<ushort>(y, x) (读取 16 位)它因 abort() has been called 而崩溃.如果我使用 <short> 也会发生同样的情况相反。

当我使用 Mat_In->at<uchar>(y, x) (读取 8 位)它可以工作,但会在不缩放的情况下切断信息。这在图像的较亮区域显示为“黑洞”,可能是溢出效应。

我想我应该提一下,拍摄图像的相机只使用 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;
}

关于c++ - 读取 OpenCV Mat 16bit 到 QImage 8bit Greyscale,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52188100/

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