简单图像融合1

#include "cv.h" #include "highgui.h" #include "stdio.h" int main(int argc,char *argv[]) { IplImage* image1=0; IplImage* image2=0; IplImage* image3=0; int width=300,height=200; int channels1=0,channels2=0,channels3=0; //创建图像头并分配据 image1=cvCreateImage(cvSize(width,height),IPL_DEPTH_64F,3); image2=cvCreateImage(cvSize(width,height),IPL_DEPTH_64F,3); image3=cvCreateImage(cvSize(width,height),IPL_DEPTH_64F,3); //创建窗口 cvNamedWindow("image1",CV_WINDOW_AUTOSIZE); cvNamedWindow("image2",CV_WINDOW_AUTOSIZE); cvNamedWindow("image3",CV_WINDOW_AUTOSIZE); //1间接访问方式 //读取图像的通道数值 channels1=image1->nChannels; //对多通道图像设置相应的相数值 CvScalar s1; for(int i=0;i<height;i++) for(int j=0;j<width;j++) { s1.val[0]=255; s1.val[1]=0; s1.val[2]=0; cvSet2D(image1,i,j,s1); } //对image2进行操作 channels2=image2->nChannels; //对多通道图像设置相应的相数值 CvScalar s2; for( i=0;i<height;i++) for(int j=0;j<width;j++) { s2.val[0]=0; s2.val[1]=0; s2.val[2]=255; cvSet2D(image2,i,j,s2); } //对多通道图像读出相应的相数值 //对image1,imgage2进行融合操作 //注意此处用指针直接访问//比较高效 height=image3->height; width=image3->width; int step=image3->widthStep/sizeof(double); channels3=image3->nChannels; double* data=(double*)image3->imageData; //对多通道图像设置相应的相数值 CvScalar s3; for( i=0;i<height;i++) for(int j=0;j<width;j++) { for(int k=0;k<channels3;k++) { if(s1.val[k]>=s2.val[k]) s3.val[k]=s1.val[k]; else s3.val[k]=s2.val[k]; // if(s1.val[k]>=s2.val[k]) // data[i*step+j*channels3+k]=s1.val[k]; // else // data[i*step+j*channels3+k]=s2.val[k]; } cvSet2D(image3,i,j,s3); } //显示窗口 cvShowImage("image1",image1); cvShowImage("image2",image2); cvShowImage("image3",image3); cvWaitKey(0); //销毁窗口 cvDestroyWindow( "Image1" ); cvDestroyWindow( "Image2" ); cvDestroyWindow( "Image3" ); //释放图像 cvReleaseImage(&image1); cvReleaseImage(&image2); cvReleaseImage(&image3); return 0; }

你可能感兴趣的:(image,include)