如何实现图像减操作

问题描述

如何实现图像减操作
#include
#include
#include

using namespace std;
void main(unsigned char *src1 unsigned char *src2 unsigned char *dst int width int height)
{

IplImage *image1 *image2 *image3;image1 = cvLoadImage(""1.jpg"" 0);//以灰度图像的形式读入图片 image2 = cvLoadImage(""2.jpg"" 0);cvNamedWindow(""image"" CV_WINDOW_AUTOSIZE);cvNamedWindow(""image2"" CV_WINDOW_AUTOSIZE);cvNamedWindow(""image3"" CV_WINDOW_AUTOSIZE);cvShowImage(""image"" image3);cvWaitKey(0);int i j;unsigned char *p1 *p2 *p3;p1 = src1;p2 = src2;p3 = dst;for (j = 0; j< height; j++){    for (i = 0; i< width; i++ p1++ p2++ p3++)    {        (*p3) = abs((*p1) - (*p2));    }}

}

解决方案

1、使用opencv内置函数获取像素点灰度做差法。
bool imageSubtract(IplImage* srcIplImage* dst)
{
int row = 0;//行
int col = 0;//列
CvScalar s;

if (!src || !dst){    return 0;}if ((src->height != dst->height) && (src->width != dst->width)){    return 0;}for (row = 0;row <src->height;row++){       for (col = 0;col<src->width;col++)    {        s.val[0] = fabs(cvGet2D(srcrowcol).val[0]-cvGet2D(dstrowcol).val[0]);         cvSet2D(dstrowcols);//相差结果存于dst    }}return 1;

}
2、使用指针获取像素灰度做差法
bool imageSubtract(IplImage* srcIplImage* dst)
{
int row = 0;//行
int col = 0;//列
uchar* pSrcData = NULL;
uchar* pDstData = NULL;
int stepSrc = 0;
int stepDst = 0;

if (!src || !dst){    return 0;}if ((src->height != dst->height) && (src->width != dst->width)){    return 0;}pSrcData = (uchar *)src->imageData;stepSrc = src->widthStep/sizeof(uchar);pDstData = (uchar *)src->imageData;stepDst = dst->widthStep/sizeof(uchar);for (row = 0;row <src->height;row++){       for (col = 0;col<src->width;col++)    {        pDstData[row*stepDst+col] = abs(pSrcData[row*stepSrc+col] - pDstData[row*stepDst+col]);    }}return 1;

}

解决方案二:
忘了说明,上面两个函数都是基于单通道图像做差的。因此读入图像后要进行灰度化或者二值化才可调用。

解决方案三:
OpenCV学习之图像操作
最近被一个问题困扰着,如何实现类似Photoshop的多层图像操作,每层可单独操作,又可以组合显示出来。
指针和图像的操作

时间: 2024-12-21 20:29:44

如何实现图像减操作的相关文章

如何改变实现图像减操作

问题描述 如何改变实现图像减操作 #include#include int main(){ IplImage * image1 *image2 *image3; image1 = cvLoadImage(""1.jpg"" 0);//以灰度图像的形式读入图片 image2 = cvLoadImage(""2.jpg"" 0); cvNamedWindow(""image"" CV_WIN

python图像数组操作与灰度变换

Python图像数组操作与灰度变换 使用python以及numpy通过直接操作图像数组完成一系列基本的图像处理 numpy简介: NumPy是一个非常有名的 Python 科学计算工具包,其中包含了大量有用的工具,比如数组对象(用来表示向量.矩阵.图像等)以及线性代数函数. 数组对象可以实现数组中重要的操作,比如矩阵乘积.转置.解方程系统.向量乘积和归一化.这为图像变形.对变化进行建模.图像分类.图像聚类等提供了基础. 在上一篇python基本图像操作中,当载入图像时,通过调用 array()

日期加减-c++如何实现时间的加减操作?

问题描述 c++如何实现时间的加减操作? c++如何实现时间的加减操作,比如有一个时间2015-03-30 23:20:20,我想减去一个月,加上2小时,如何实现??望高手赐教,代码越简洁越好! 解决方案 分别单独处理时间和日期 如果时间处理时,发现要对日期进行变化,则调用日期变化的功能.日期变化的功能,其实也不难.就是麻烦. 需要判断是否是闰年?然后按 1.3.5.7.8.10.12 和 除了2月之外的其它月进行处理. 解决方案二: 可以自己写一个时间类,然后重载加减运算符 解决方案三: CT

成员函数、-c++用成员函数和友元函数实现复数的加减操作,产生了二义性,麻烦各位大哥大姐解答一下,感激不尽

问题描述 c++用成员函数和友元函数实现复数的加减操作,产生了二义性,麻烦各位大哥大姐解答一下,感激不尽 我想在一个程序中用友元函数和类的成员函数实现复数的加减操作, 类中这样定义: main函数中用这几句调用的话存在二义性: c3=c1+c2;这一句就不知道到底该调用成员函数还是调用友元函数,但是重载的话只有参数类型和参数个数不同,就应该没问题的,这里该怎么解决呢? 麻烦各位大哥大姐了:下面是程序的代码, #include class Complex { public: Complex(dou

asp.net 获取当前时间做加减操作

问题描述 asp.net 获取当前时间做加减操作 asp.net 获取当前时间做加减操作 DateTime.Now.ToString("yyyy-MM-dd"); 获取当前时间在这基础上减7天 或者一个月 或者 一季 解决方案 AddDays(-7) AddMonth(-1) 季度这个没有,可以这么写 AddMonth(1 - DateTime.Now.Month % 3) 解决方案二: ASP.NET时间操作asp.net获取当前时间asp.net获取当前时间

ORACLE中的日期加减操作实例介绍_Oracle应用

无论是DATE还是timestamp都可以进行加减操作. 可以对当前日期加年.月.日.时.分.秒,操作不同的时间类型,有三种方法: 1 使用内置函数numtodsinterval增加小时,分钟和秒 2 加一个简单的数来增加天 3 使用内置函数add_months来增加年和月 例: 对当前日期增加一个小时: 复制代码 代码如下: SQL> select sysdate, sysdate+numtodsinterval(1,'hour') from dual ; SYSDATE           

关于PHP中的自增、自减操作的奥秘

首先看一道面试题: $a = 1; $b = &$a; if ($b == $a++) echo "true"; else echo "false"; 首先,创建了一个变量$a,并且将数值设定为了1: 然后,创建了一个变量$b,并将其作为对$a的一个引用: 最后这个判断语句中,包含两个opcode:POST_INC 和 IS_EQUAL.首先执行的是先返回后自增语句(POST_INC),首先返回1,然后$a自增为了2,因为$b是$a的一个引用,$b也是2.然

机构炒新热度未减操作手法游资化

7月至今上市35只中小板创业板次新股中,有13只出现机构席位 证券时报记者 罗 力 随着越来越多的中小板.创业板新股上市,机构热衷于"炒新"已不是新鲜事.自7月以来,机构对新股的追捧热情再度高涨,即使在昨天股指再度走低之时,机构仍频频现身于一些新股中. 据粗略统计,7月至今上市的35只中小板与创业板新股中,机构染指的个股就有13只,分别是众业达.巨星科技.国星光电.康得新.天马精化.松芝股份.欧菲光.青龙管业.赣锋锂业.金刚玻璃.易联众.智云股份.国腾电子,其中对众业达.天马精化.欧菲

ASP 中 DateDiff 函数详解 主要实现两日期加减操作_ASP基础

ASP 中 DateDiff 函数详解DateDiff 函数  描述  返回两个日期之间的时间间隔.  语法  DateDiff(interval, date1, date2 [,firstdayofweek][, firstweekofyear]])  DateDiff 函数的语法有以下参数:  参数 描述  interval 必选.字符串表达式,表示用于计算 date1 和 date2 之间的时间间隔.有关数值,请参阅"设置"部分.  date1, date2 必选.日期表达式.用