图像差分 (IplImage *) 版

简介:

//图像差分
#include <stdio.h>
#include <stdlib.h>
#include "cv.h"
#include "highgui.h"
#include <iostream>

using namespace std;

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);
	step = X->widthStep/sizeof(uchar);
	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]);

			//255是白色
			if(dataX[i*step+j] != dataY[i*step+j])
				dataX_Y[i*step+j]=150;

			else
				dataX_Y[i*step+j]=dataX[i*step+j];
		}
}


int main()
{
	IplImage* pImgX;
	IplImage* pImgY;
	IplImage* pImgX_Y;
	CvSize dest_size;
	pImgX = cvLoadImage("mmr_out.jpg", -1);
	pImgY = cvLoadImage("zcr_out.jpg", -1);

	//cvShowImage("先看看", pImgX);

	if(pImgX==0 || pImgY==0)
	{
		printf("载入文件失败!/n");
		return -1;
	}
	dest_size.width = pImgX->width;
	dest_size.height = pImgX->height;

	cout<<"width == "<<dest_size.width<<endl;
	cout<<"height == "<<dest_size.height<<endl;

	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;
}



相关文章
|
机器学习/深度学习 计算机视觉
图像各向异性滤波
图像各向异性滤波 各向异性概念 各向异性(英文名称:anisotropy)是指材料在各方向的力学和物理性能呈现差异的特性。晶体的各向异性即沿晶格的不同方向,原子排列的周期性和疏密程度不尽相同,由此导致晶体在不同方向的物理化学特性也不同,这就是晶体的各向异性。
1648 0
|
9月前
|
算法 计算机视觉
OpenCV高斯差分技术实现图像边缘检测
OpenCV高斯差分技术实现图像边缘检测
|
资源调度 算法 API
OpenCV_06 图像平滑:图像噪声+图像平滑+滤波
由于图像采集、处理、传输等过程不可避免的会受到噪声的污染,妨碍人们对图像理解及分析处理。常见的图像噪声有高斯噪声、椒盐噪声等。
162 0
|
9月前
|
算法
[Halcon&图像] 边缘提取算法汇总
[Halcon&图像] 边缘提取算法汇总
431 0
|
计算机视觉
OpenCV使用Sobel滤波器实现图像边缘检测
纯粹阅读,请移步OpenCV使用Sobel滤波器实现图像边缘检测 效果图 源码 KqwOpenCVFeaturesDemo Sobel滤波器也叫Sobel算子,与Canny边缘检测一样,需要计算像素的灰度梯度,只不过是换用另一种方式。
1846 0
|
9月前
|
算法 计算机视觉
OpenCV对图像进行Otsu二值分割、Canny边缘检测、Harris角点检测实战(附源码)
OpenCV对图像进行Otsu二值分割、Canny边缘检测、Harris角点检测实战(附源码)
120 0
|
9月前
|
算法
[Halcon&图像] 图像阈值分割算法汇总
[Halcon&图像] 图像阈值分割算法汇总
226 0
|
数据安全/隐私保护 Python
图像的傅里叶变换(一)
图像的傅里叶变换
132 0
|
计算机视觉 Python
图像的傅里叶变换(二)
图像的傅里叶变换(二)
123 0

热门文章

最新文章