OpenCV图像差分


  1. //图像差分   
  2. #include <stdio.h>   
  3. #include <stdlib.h>   
  4. #include "cv.h"   
  5. #include "highgui.h"   
  6. void Image_Minus(IplImage *X, IplImage *Y, IplImage *X_Y)  
  7. {  
  8.     //图像差分函数,将图像1中像素和图像2中对应像素想减,要求X、Y、X_Y大小相同   
  9.     int i,j,width,height,step,chanel;  
  10.     unsigned char *dataX, *dataY, *dataX_Y;  
  11.     width = X->width;  
  12.     height = X->height;  
  13.     dataX = (unsigned char *)X->imageData;  
  14.     dataY = (unsigned char *)Y->imageData;  
  15.     dataX_Y = (unsigned char *)X_Y->imageData;  
  16.     step = X->widthStep/sizeof(char);  
  17.     chanel = X->nChannels;  
  18.     for(i=0; i<height; i++)  
  19.         for(j=0; j<width*chanel; j++)  
  20.             dataX_Y[i*step+j] = abs( dataX[i*step+j] - dataY[i*step+j]);  
  21. }  
  22. int main()  
  23. {  
  24.     IplImage* pImgX;  
  25.     IplImage* pImgY;  
  26.     IplImage* pImgX_Y;  
  27.     CvSize dest_size;  
  28.     pImgX = cvLoadImage("D://bishe//07_31_10_09_41_08.bmp", -1);  
  29.     pImgY = cvLoadImage("D://bishe//07_31_10_11_40_48.bmp", -1);  
  30.       
  31.     if(pImgX==0 || pImgY==0)  
  32.     {  
  33.         printf("载入文件失败!/n");  
  34.         return -1;  
  35.     }  
  36.     dest_size.width = pImgX->width;  
  37.     dest_size.height = pImgX->height;  
  38.     pImgX_Y = cvCreateImage(dest_size, pImgX->depth, pImgX->nChannels);  
  39.     //图像差分   
  40.     Image_Minus(pImgX, pImgY, pImgX_Y);  
  41.     //创建窗口   
  42.     cvNamedWindow("Picture X:", 1);  
  43.     cvNamedWindow("Picture Y:", 1);  
  44.     cvNamedWindow("Picture X-Y:", 1);  
  45.     //显示图像   
  46.     cvShowImage("Picture X:", pImgX);  
  47.     cvShowImage("Picture Y:", pImgY);  
  48.     cvShowImage("Picture X-Y:", pImgX_Y);  
  49.     cvWaitKey(0);  
  50.     //销毁窗口   
  51.     cvDestroyWindow("Picture X:");  
  52.     cvDestroyWindow("Picture Y:");  
  53.     cvDestroyWindow("Picture X-Y:");  
  54.     //释放图像   
  55.     cvReleaseImage(&pImgX);  
  56.     cvReleaseImage(&pImgY);  
  57.     cvReleaseImage(&pImgX_Y);  
  58.     return 0;  
  59. }  

相关内容