OpenCV下面这段代码输入是什么?(只输出201吗? )

#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include<stdlib.h>
#include<stdio.h>

int main(int argc, char* argv[])
{
        IplImage* src;
        int y,x;

        src = cvCreateImage(cvSize(100,100),8,1);

        for( y=0;y<src->height;y++)
        {
                cvSetReal2D(src,y,0,201);
        }

        cvSaveImage("1.jpg",src);

        IplImage* dst  ;

        dst = cvLoadImage("1.jpg",0);

        for( y=0;y<dst->height;y++)
        {
                for(x=0;x<dst->width;x++)
                {
                        int value = (int)cvGetReal2D(dst,y,x);
                        if(value>0)
                        printf("%d\n" , value);
                }
        
        }

        

        cvReleaseImage(&src);
        cvReleaseImage(&dst);
        return 0;
}

 

 

cvSetReal2D 就是给单通道图像赋值用的,我的输出有201,204,但大部分的都是205,

  对于这个程序中输出的结果,我不改变程序的时候输出的有201,204,205三个值,大部分是205.

后面我把程序中的图片格式改成了bmp格式,结果204这个值就没有了,

我想程序中的问题是不是跟保存图片的格式

  for( y=0;y<src->height;y++)

        {

                cvSetReal2D(src,y,0,201);

        }

这段 只是设置了列值啊,为啥全部值都赋值了,有默认?

我刚刚有发现了,src = cvCreateImage(cvSize(100,100),8,1);

这个函数在产生图片的时候,里面的灰度值就是205了,

所以后面只是把图像的第一列所有行的值变成201,所以输出来就不只有201了,

请问楼主是这个原因么?

我终于知道原因了,我上面说的也是不对的。

输出的结果不只是201的原因是src = cvCreateImage(cvSize(100,100),8,1);

在创建图像的时候,会给它随机分配一些值,所以出来就不只是201了,

如果你创建图像后将它置零

如:cvZero(src),这样之后就只输出201了,楼主这次对了吧,

 

不全是201,如果光拿着代码去运行的话,应该得到得答案是不同的,

我的前后全是201,但是中间有1,4,5,2之类的。创建src图像以后,

应该立即把src图像用cvZero(src)处理一下,得到的答案就全是201.

初始化时统计有N多的205,即初始化时src里面已经有数据了,

而赋值201只赋值了图像的一部分。

cvCreateImage初始化建立的图像里面有非0值

这个跟图像格式有关,存成bmp,不会出现这种现象,就可以了

我输出大部分是205,只有两个输出是201,205应该是创建图片参数depth默认为205,

如果你把深度设置为IPL_DEPTH_32F输出全部是201了

 

发现中间几行还会出现其他数值,

可是把图像的大小变成10*10时全部都是201了,是不是跟图像的大小有关???

我的输出有201,204,但大部分的都是205,

 

猜你喜欢

转载自blog.csdn.net/qq_30460949/article/details/89449170