opencv中16位的矩阵保存成图像,最大灰度值只有32768

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv中16位的矩阵保存成图像,最大灰度值只有32768相关的知识,希望对你有一定的参考价值。

opencv中16位的矩阵保存成图像,最大灰度值只有32768是什么原因?矩阵中最大值是65536,用cvsaveimage保存后,图像就变成15位了的感觉,代码如下,min1 = 1000,max1 = 65536,但是保存下来灰度值最大值就变成32768了
cvSaveImage("123.png",mat_b);
double min1 = 0;
double max1 = 0;
cvMinMaxLoc(mat_b,&min1,&max1);

参考技术A 但是保存下来灰度值大值变成32768了。

你是通过什么得到这个数的,看你下面的代码 max1 = 65536 应该没问题追问

在PHOTOSHOP里面打开看的,而且PNG保存出来的图像看起来确实跟FIT的有点不一样

本回答被提问者采纳

OpenCV如何获取GLCM灰度共生矩阵

【中文标题】OpenCV如何获取GLCM灰度共生矩阵【英文标题】:OpenCV how to get GLCM gray-level co-occurrence matrix 【发布时间】:2012-04-30 11:42:19 【问题描述】:

我正在尝试在 OpenCV 中使用 GLCM(图像中的灰度共现矩阵 (GLCM))提取特征。

在 matlab 中我们有graycomatrix。我们在 openCV 中是否有任何用于相同目的的功能?如果没有,那么实现它的最佳解决方案是什么?是否有任何可行的示例?

[编辑]

我试过这段代码,但它给出的值与 matlab 结果相比是错误的

            char rawdata[4][4] =  0, 1, 2, 3,
           1, 1, 2, 3,
           1, 0, 2, 0,
           0, 0,0, 3;

           src->imageData = (char*)(&rawdata);

             CvGLCM* glcm;
            glcm = cvCreateGLCM(src, 2, NULL,4, CV_GLCM_OPTIMIZATION_NONE);
            cvCreateGLCMDescriptors(glcm, CV_GLCMDESC_OPTIMIZATION_ALLOWDOUBLENEST);

           for (int step=0; step<4; step++)
            
                 printf("%.3f,", cvGetGLCMDescriptor(glcm, step, CV_GLCMDESC_CONTRAST));
                  printf("\n");
            

【问题讨论】:

【参考方案1】:

有一个类叫CvGLCM:

OpenCV-2.3.1a documentation

不过我没用过。

【讨论】:

我以前用过这个,但没有给出正确的结果,知道为什么吗? 还有什么帮助吗???对我来说解决它真的很重要..我已经用我当前的 GLCM 代码编辑了这个问题,但仍然没有正确的信息。 帮不了你了,我只安装了一个旧版本的 opencv,它没有这个包。我建议你再问一个关于这个问题的编辑部分的问题,人们会更愿意帮助调试代码而不是回答理论问题【参考方案2】:

你必须安装 scipy,numpy,skimage。并且 skimage 有模块 skimage.feature 其中包括 skimage.feature.greycomatrix 和 skimage.feature.greycoprops 在那里我们可以计算 ndarray uint8 的 graycoimage 以及 greco 属性instructions

【讨论】:

以上是关于opencv中16位的矩阵保存成图像,最大灰度值只有32768的主要内容,如果未能解决你的问题,请参考以下文章

计算机视觉OpenCV 4高级编程与项目实战(Python版):图像像素统计

LIBTIFF 16位灰度tif图像转成OpenCV中的Mat格式并显示

opencv的img.flat的函数用法

16位图像的65536种颜色是指彩色,还是灰度(灰阶)?

matlab 将数字矩阵转换成图像

MATLAB中如何将一幅图像改为不同的亮度级?