gpt4 book ai didi

opencv - 如何制作16位灰度数据的OpenCV IplImage?

转载 作者:行者123 更新时间:2023-12-02 17:13:43 31 4
gpt4 key购买 nike

该代码用于8位数据,以生成灰度IplImage。

    IplImage* img_gray_resize = NULL;
img_gray_resize = cvCreateImage(cvSize(320, 256), IPL_DEPTH_8U, 1);
DWORD dwCount;
LVDS_SetDataMode(0); // o for 8 bit mode and 1 for 16 bit mode
dwCount = (LONG)320 * (LONG)256;
unsigned char* m_pImage = NULL;
m_pImage = new unsigned char[320 * 256];
for (int i=0; i<320 * 256; i++) m_pImage[i] = NULL;
LVDS_GetFrame(&dwCount, m_pImage);
int width = 320;
int height = 256;
int nn = 0;
int ii = 0;
for (int y=0; y<height; y++)
{
for (int x=0; x<width; x++)
{
ii = y * width + x;
if(nn < (height*width))
img_gray_resize->imageData[ii] = m_pImage[nn++];
}
}
delete [] m_pImage;

我需要显示16位灰度图像。如果显示8位数据,则​​图像中缺少某些信息。但是,LVDS_SetDataMode()可以提供两种类型的数据。我正在使用一个图像采集卡设备库。请帮我。

最佳答案

16位图像应以IPL_DEPTH_16U(或CV_16U)模式存储。这是正确的内存布局。

但是,显示它们取决于您的显示硬件。
大多数常规显示API,例如OpenCV的highgui,只能显示8位图像。
要实际显示图像,必须将图像转换为8位才能显示。

您将需要决定如何执行此操作。有多种方法可以执行此操作,具体取决于您的应用程序和复杂性。一些选项是:

  • 显示MSB =将图像右移8个像素。
  • 显示LSB =使255以上的内容饱和。
  • 实际上,将其右移0-8位之间的任何值,并与cv::saturate_cast结合使用以避免值回绕。
  • HDR-> LDR =应用动态范围压缩算法。
  • 关于opencv - 如何制作16位灰度数据的OpenCV IplImage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21085421/

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