基本图像运算
1、图像加法;
2、图像减法;
3、图像乘除;
4、图像逻辑运算: 与、或、非、取反、异或;
图像加法
1、API : Add() 两张图像直接相加;
2、API : AddWeighted() : 按照权重相加;dst = a * src1 + b * src2 + gamma;
3、注意:图像像素值相加超过255后会被截断;
4、注意:图像进行加法操作前必须保证两幅图像的大小和位深度完全相同;


图像减法
1、API : CvInvoke.Subtract() : 两张图像像素做减法,如果结果小于0,则取0(截断,信息丢失);
2、API : CvInvoke.AbsDiff() : 两张图像像素做减法,如果结果小于0,则取绝对值(信息保留);

图像乘除(multiply、divide)
1、C++/Python中矩阵乘除允许 * ,/ 运算符之间操作,EmguCV中不支持,必须使用函数调用;
//创建临时矩阵用于图像乘除
temp.SetTo(new MCvScalar(1,5,1)) ; //乘法则 B分量不变,G分量 * 5 ;R分量不变; 除法则相反


图像逻辑运算(逻辑与、或、非、异或)
注意:进行图像逻辑运算的图片需要具有相同的大小和位深度;
逻辑运算原理:
Image1 在一点像素值为100,Image2在同一点像素值为10,其逻辑运算为: 将100,10均转换为二进制,再进行逻辑运算,得到二进制结果,最后在转换为十进制即为逻辑运算的结果;
1、与(&):CvInvoke.BitwiseAnd();(两张图片)

保留高亮部分:

2、或(|) : CvInvoke.BitwiseOr();(两张图片)


3、取反(!/~): CvInvoke.BitwiseNot();(一张图片)
原理:
彩色图像像素值先转换为二进制,然后进行取反运算,得出结果后再转换为10进制;


4、异或(^) : CvInvoke.BitwiseXor();
原理:
相同为1,不同为0,用来求两幅图像不同的区域,不同的区域高亮进行显示;


Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Emgu.CV;
using Emgu.Util;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;
using System.Drawing;
namespace lesson9
{
class Program
{
static void Main(string[] args)
{
Mat src1 = new Mat("c:/users/hello/desktop/15.jpg");
Mat src2 = new Mat("c:/users/hello/desktop/16.jpg");
Mat dst = new Mat();
//CvInvoke.Add(src1, src2, dst);
//CvInvoke.AddWeighted(src1, 0.8, src2, 0.2, 0, dst);
//CvInvoke.Subtract(src1, src2, dst);
//CvInvoke.AbsDiff(src1, src2, dst);
//创建待乘待除矩阵
Mat temp = new Mat(src1.Size, DepthType.Cv8U, 3);
temp.SetTo(new MCvScalar(5, 5, 5)); // B * ? ; G * ? ; R * ?
//CvInvoke.Multiply(src1, temp, dst,1); // 1 : scale: 放大倍数
//CvInvoke.Divide(src1, temp, dst, 1);
//CvInvoke.BitwiseAnd(src1, src2, dst);
//CvInvoke.BitwiseOr(src1, src2, dst);
//CvInvoke.BitwiseNot(src1, dst);
CvInvoke.BitwiseXor(src1, src2, dst);
CvInvoke.Imshow("out put1", dst);
CvInvoke.WaitKey(0);
}
}
}
效果
Subtract:

AbsDiff :

本文详细介绍了图像处理中的基本运算,包括图像加法、减法、乘除及逻辑运算等。涵盖了图像加法的不同方法,如直接相加和按权重相加,图像减法的截断与取绝对值方式,以及图像乘除的实现。同时,深入解析了图像逻辑运算的原理,如与、或、非、异或等,并提供了代码示例。

被折叠的 条评论
为什么被折叠?



