OpenCV图像差分
OpenCV图像差分
- //图像差分
- #include <stdio.h>
- #include <stdlib.h>
- #include "cv.h"
- #include "highgui.h"
- void Image_Minus(IplImage *X, IplImage *Y, IplImage *X_Y)
- {
- //图像差分函数,将图像1中像素和图像2中对应像素想减,要求X、Y、X_Y大小相同
- int i,j,width,height,step,chanel;
- unsigned char *dataX, *dataY, *dataX_Y;
- width = X->width;
- height = X->height;
- dataX = (unsigned char *)X->imageData;
- dataY = (unsigned char *)Y->imageData;
- dataX_Y = (unsigned char *)X_Y->imageData;
- step = X->widthStep/sizeof(char);
- chanel = X->nChannels;
- for(i=0; i<height; i++)
- for(j=0; j<width*chanel; j++)
- dataX_Y[i*step+j] = abs( dataX[i*step+j] - dataY[i*step+j]);
- }
- int main()
- {
- IplImage* pImgX;
- IplImage* pImgY;
- IplImage* pImgX_Y;
- CvSize dest_size;
- pImgX = cvLoadImage("D://bishe//07_31_10_09_41_08.bmp", -1);
- pImgY = cvLoadImage("D://bishe//07_31_10_11_40_48.bmp", -1);
- if(pImgX==0 || pImgY==0)
- {
- printf("载入文件失败!/n");
- return -1;
- }
- dest_size.width = pImgX->width;
- dest_size.height = pImgX->height;
- pImgX_Y = cvCreateImage(dest_size, pImgX->depth, pImgX->nChannels);
- //图像差分
- Image_Minus(pImgX, pImgY, pImgX_Y);
- //创建窗口
- cvNamedWindow("Picture X:", 1);
- cvNamedWindow("Picture Y:", 1);
- cvNamedWindow("Picture X-Y:", 1);
- //显示图像
- cvShowImage("Picture X:", pImgX);
- cvShowImage("Picture Y:", pImgY);
- cvShowImage("Picture X-Y:", pImgX_Y);
- cvWaitKey(0);
- //销毁窗口
- cvDestroyWindow("Picture X:");
- cvDestroyWindow("Picture Y:");
- cvDestroyWindow("Picture X-Y:");
- //释放图像
- cvReleaseImage(&pImgX);
- cvReleaseImage(&pImgY);
- cvReleaseImage(&pImgX_Y);
- return 0;
- }
评论暂时关闭