【问题标题】:How to make OpenCV IplImage for 16 bit gray-data?如何为 16 位灰度数据制作 OpenCV IplImage?
【发布时间】:2014-01-31 20:27:35
【问题描述】:

此代码用于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() 可以提供这两种类型的数据。我正在使用一个用于图像采集卡设备的库。请帮帮我。

【问题讨论】:

    标签: opencv iplimage


    【解决方案1】:

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

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

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

    • 显示 MSB = 将图像右移 8 个像素。
    • 显示 LSB = 饱和任何高于 255
    • 事实上,右移 0-8 位之间的任意值,并结合 cv::saturate_cast 以避免值回绕。
    • HDR->LDR = 应用动态范围压缩算法。

    【讨论】:

      【解决方案2】:

      最后,我通过以下方式解决了这个问题:

       dwCount = (LONG)320 * (LONG)256 * 2;
       LVDS_SetDataMode(1);
       img_gray_resize->imageData[ii] = m_pImage[nn++] >> 6;
      

      只需将位右移 (2, 3, 4, 5, 6, ...),您会得到好的结果,请使用该值。

      【讨论】:

      • 是的,在 0-8 位之间移动任何位置都会显示不同的强度带。但是,您必须确保实际上 饱和 8 位值,否则您的强度值将环绕 mod(1
      【解决方案3】:

      据我所知,只能显示 8bit 数据,您需要找到将 16bit 转换为 8bit 的最佳方法,以尽量减少丢失的信息。可以应用直方图均衡来做到这一点。

      【讨论】:

      • 如何将 16 位数据转换为 8 位数据?请给我一些信息。
      • 1.计算关于 16 位图像的 hisgram 2. 将其规范化为 prob 并转换为 cdf 3. 将值为 cdf 的索引映射到 256 * cdf
      猜你喜欢
      • 2012-06-13
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      • 2015-08-11
      • 2012-02-07
      • 2011-09-19
      • 2013-05-17
      • 2011-09-08
      相关资源
      最近更新 更多