#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,不会出现这种现象,就可以了
|
|
发现中间几行还会出现其他数值, 可是把图像的大小变成10*10时全部都是201了,是不是跟图像的大小有关??? 我的输出有201,204,但大部分的都是205,
|