现已知道在8U型的图像中,如果相素等于0则表示该点是黑色的,如果等于255则表示是白色的;
在16F型的图像中(浮点),如果相素等于0则表示该点是黑色的,如果等于1则表示是白色的。
下面的三个小程序都是试图把图像的中间部位设置成白色的:
程序一:对于8U型的图像
#include"stdafx.h"
#include"cv.h"
#Include"highgui.h"
void main()
{
IplImage* img=cvCreateImage(cvSize(500,500),IPL_DEPTH_8U,1);
cvZero(img);
uchar* data=(uchar*)img->ImageData;
int i,j;
for(i=50;i<350;i++)
for(j=50;j<350;j++)
data[i*img->widthStep+j]=255;
cvNamedWindow("crystal",0);
cvShowImage(crystal",img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("crystal");
}
运行结果:得到一幅中间白,旁边黑的图像。(运行成功)
程序二:对于16F的矩阵
#include "stdafx.h"
#include"highgui.h"
#include"cv.h"
void main()
{
CvMat* img=cvCreateMat(500,500,CV_32FC1);
cvZero(img);
int i,j;
for(i=150;i<350;i++)
for(j=150;j<350;j++)
cvSetReal2D(img,i,j,1);
cvNamedWindow("crystal",0);
cvShowImage("crystal",img);
cvWaitKey(0);
cvReleaseMat(&img);
cvDestroyWindow("crystal");
}
运行结果:同上。(运行成功)
程序三:对于16F的图像
#include"stdafx.h"
#include"cv.h"
#include"highgui.h"
void main()
{
IplImage* img=cvCreateImage(cvSize(500,500),IPL_DEPTH_32F,1);
cvZero(img);
int i,j;
for(i=150;i<350;i++)
{
float *ptr=(float*)(img->imageData+i*img->widthStep/4);
for(j=150;j<350;j++)
ptr[j*img->widthStep/4+i]=1;
}
cvNamedWindow("crystal",0);
cvShowImage("crystal",img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("crystal");
}
运行结果:能运行出来,但不是预期的结果。(运行失败)
很奇怪的一个问题,有待以后再来研究!