图像差分 (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;
}
时间: 2024-11-16 05:55:15

图像差分 (IplImage *) 版的相关文章

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,chan

《Kinect应用开发实战:用最自然的方式与机器对话》一第1章 自然人机交互技术漫谈1.1 自然人机交互技术的发展

第1章 自然人机交互技术漫谈 自然用户界面(Natural User Interface, NUI)是指一类无形的用户界面."自然"一词是相对图形用户界面(GUI)而言的,GUI要求用户必须先学习软件开发者预先设置好的操作,而NUI则只需要人们以最自然的交流方式(如语言和文字)与机器互动.直观地说,就是使用NUI的计算机不需要键盘或鼠标. -维基百科 这些自然的.有响应的交互,向我们展示了如何让机器的智能与协作力自然地发挥出来,营造出真正的"机器+人"的共生系统,也

图片格式与设计那点事儿

第一次写技术博客,有不尽如人意的地方,还请见谅和指正. 为什么想整理这方面的类容,我觉得就像油画家要了解他的颜料和画布.雕塑家要了解他的石材一样,作为网页设计师也应该对图片格式的特性有一定了解,这样才能更好的表达你的创意和想法. 除此之外,我们在平时工作中也会遇到许多与图片格式相关的问题.比如设计师会奇怪为什么有些页面的产出物总是没法达到设计稿那样的品质和效果,什么样的设计才更适合Web页面;页面重构师和前端工程师则想知道在切图的时候应采用什么图片格式.如何进行参数设置才能达到品质和性能的最优化

18个Photoshop隐藏技巧

  1.在画布中调整笔刷的各种参数 关于笔刷,用过PS的人基本上都知道几个快捷键,比如Ctrl+"["."]"调整笔刷大小之类,这次我带来的方法比那个更加便捷,不但是大小上的调整,连同硬度和颜色都可以在画布中完成调整. 方法: ①在画布中按住Alt+鼠标右键--此时在画布上会出现一个红色的圆点,圆点代表了你笔刷的大小和硬度(越实越硬,越虚越软),拖动鼠标进行左右平移可以调整笔刷的大小,上下拖动可以调整硬度.如图 ②按住Alt+Shift+鼠标右键--此时你会发现鼠标

Photoshop那些你所不知道的冷知识汇总

  本来已经打算将 第三期 作为这一系列的完结篇的~但我昨天将PS更新到了最新版,发现Adobe在这次更新变更了我常用的功能键使用方式(后文详述),于是我查看了PS的更新日志,发现这几次更新中又多了一些亮点,其中针对图层组做了一些优化,还有个"抽出资源"的新东东,而对参考线则新增两个新功能,从此曾经的必备插件贵的贵的(guideguide)等终于可以光荣下岗了~ 哈哈哈,看来是要食言了!刚刚金盆洗手,肥皂还没打完就又要重出江湖了~PS冷知识第四期走起! 那么进入正题~ 一,参考线 1.

EPS是什么格式?

EPS文件是目前桌面印刷系统普遍使用的通用交换格式当中的一种综合格式.EPS文件格式又被称为带有预视图象的PS格式,它是由一个PostScript语言的文本文件和一个(可选)低分辨率的由PICT或TIFF格式描述的代表像组成. EPS文件就是包括文件头信息的PostScript 文件,利用文件头信息可使其他应用程序将此文件嵌入文档. 特征: (1)EPS文件格式又被称为带有预视图象的PS格式,它是由一个PostScript语言的文本文件和一个(可选)低分辨率的由PICT或TIFF格式描述的代表像

eps怎么打开

有些朋友不知道EPS格式的文件用什么软件打开,小编百度了一下其实EPS格式是带有预览图像的文件格式,是在排版中经常使用的文件格式.对于设计人员而言,其最大的优点是可作为Photoshop与IIIustrator.Quard Xpress.PageMaker等软件之间的文件交换.存为EPS格式前要确认图像的模式为CMYK. 可以打开它的程序Preview预览图像可以使你在拼版时能正确摆放并预览效果.一般选择Macintosh(8 bits/pixel),8bits/pixel表示预览图像是256色

eps是什么格式?eps文件打开方法

  EPS是封装的PostScript(Encapsulated PostScript)格式.PostScript语言是Adobe 公司设计用于向任何支持PostScript语言的打印机打印文件的页面描述语言. 除了它是被优化用于纸张上打印文字和图像之外,它像Basjc 语言.c语言或任何其它编程语言一样.当你在 PostScript打印机上工作并告诉文字处理器(或任何其它的应用程序)打印页面时,计算机就会用PostScript语言编写一个程序描述该页面,并将这个程序传送给打印机.打印机实际上其

VC中常用的方法

一.打开CD-ROM  mciSendString("Set cdAudio door open wait",NULL,0,NULL);  二.关闭CD_ROM  mciSendString("Set cdAudio door closed wait",NULL,0,NULL);  三.关闭计算机  OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构  OsVersionInfo.dwOSVersionInfoSize =