C++,OpenCV图像像素运算(6)
标签: C++ OpenCV图像像素运算(6) 博客 51CTO博客
2023-04-08 18:24:00 124浏览
C++,OpenCV图像像素运算(6),参与算术运算图像的数据类型、通道数目、大小必须相同算术运算加法:addvoidadd(InputArraysrc1,InputArraysrc2,OutputArraydst,InputArraymask=noArray(),intdtype=-1);/***********************************************************
参与算术运算图像的数据类型、通道数目、大小必须相同
算术运算
加法:add
void add(InputArray src1, InputArray src2, OutputArray dst,InputArray mask = noArray(), int dtype = -1);
/*******************************************************************
* src1: 输入图1
* src2: 输入图2
* dst: 输出图
* mask: 遮罩像素 可有可无
* dtype: 输出图深度 可有可无
*********************************************************************/
减法:subtract
void subtract(InputArray src1,InputArray src2,OutputArray dst,InputArray mask = noArray(),int dtype = -1);
/*******************************************************************
* src1: 输入图1
* src2: 输入图2
* dst: 输出图
* mask: 遮罩像素 可有可无
* dtype: 输出图深度 可有可无
*********************************************************************/
乘法:multiply
void multiply(InputArray src1, InputArray src2,OutputArray dst, double scale = 1, int dtype = -1);
/*******************************************************************
* src1: 输入图1
* src2: 输入图2
* dst: 输出图
* scale: 缩放因子,即在src1*src2的基础上再乘scale
* dtype: 输出图深度 可有可无
*********************************************************************/
除法:divide
void divide(InputArray src1, InputArray src2, OutputArray dst,double scale = 1, int dtype = -1);
/*******************************************************************
* src1: 输入图1
* src2: 输入图2
* dst: 输出图
* scale: 缩放因子,即在src1*src2的基础上再乘scale
* dtype: 输出图深度 可有可无
*********************************************************************/
混合运算:addWeighted
dst = α · img1 + β · img2 + γ
void addWeighted(InputArray s1,double a,InputArray s2,double b,double gamma,OutputArray d,int dtype = -1);
/*******************************************************************
* s1: 输入图1
* a: 输入图占比 α
* s2: 输入图2
* b: 输入图2占比 β
* gamma: 附加值,结果基础上再加+gamma γ
* dst: 输出图
* dtype: 输出图深度 可有可无
*********************************************************************/
综合代码
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
class ImgOpreations
{
public:
ImgOpreations() :img1(imread("mm.jpg")), img2(imread("text.jpg"))
{
result = Mat::zeros(img1.size(), img2.type()); //存储的图像一定要初始化
}
void testAdd(string wName="Add")
{
add(img1, img2, result);
imshow(wName, result);
waitKey(0);
}
void testSub(string wName="Sub")
{
subtract(img1, img2, result);
imshow(wName, result);
waitKey(0);
}
void testMul(string wName="Mul")
{
multiply(img1, img2, result);
imshow(wName, result);
waitKey(0);
}
void testDivide(string wName = "Div")
{
divide(img1, img2, result);
imshow(wName, result);
waitKey(0);
}
//dst = α · img1 + β · img2 + γ
void testAddWeighted(string wName = "AddWeighted")
{
addWeighted(img1, 0.6, img2, 0.4, 0, result);
imshow(wName, result);
waitKey(0);
}
protected:
Mat img1;
Mat img2;
Mat result;
};
int main()
{
ImgOpreations* pImg = new ImgOpreations;
pImg->testAdd();
pImg->testSub();
pImg->testMul();
pImg->testDivide();
pImg->testAddWeighted();
return 0;
}
位运算
位与
void bitwise_and(InputArray src1, InputArray src2,,OutputArray dst, InputArray mask = noArray());
/*******************************************************************
* src1: 输入图1
* src2: 输入图2
* dst: 输出图
* mask: 遮罩像素 可有可无
*********************************************************************/
位或
void bitwise_or(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
/*******************************************************************
* src1: 输入图1
* src2: 输入图2
* dst: 输出图
* mask: 遮罩像素 可有可无
*********************************************************************/
非运算
void bitwise_not(InputArray src, OutputArray dst,InputArray mask = noArray());
/*******************************************************************
* src1: 输入图1
* dst: 输出图
* mask: 遮罩像素 可有可无
*********************************************************************/
异或运算
void bitwise_xor(InputArray src1, InputArray src2,OutputArray dst, InputArray mask = noArray());
/*******************************************************************
* src1: 输入图1
* src2: 输入图2
* dst: 输出图
* mask: 遮罩像素 可有可无
*********************************************************************/
综合代码
图像位运算用图片
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
class BitWise
{
public:
BitWise() :img1(imread("mm.jpg")), img2(imread("text.jpg")) {}
void Show()
{
imshow("mm", img1);
imshow("text", img2);
}
void BitOpreations()
{
Mat myand, myor, myxor, mynot;
bitwise_and(img1, img2, myand);
bitwise_or(img1, img2, myor);
bitwise_not(img1, mynot);
bitwise_xor(img1, img2, myxor);
imshow("and", myand);
imshow("or", myor);
imshow("xor", myxor);
imshow("not", mynot);
waitKey(0);
}
protected:
Mat img1;
Mat img2;
};
int main()
{
BitWise* pImg = new BitWise;
pImg->Show();
pImg->BitOpreations();
return 0;
}
图像位运算用自绘图图形
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
class BitWise
{
public:
BitWise() :img1(Mat(200,200,CV_8UC1)), img2(Mat(200,200,CV_8UC1))
{
//Rect绘制矩形(左上角坐标 和绘制矩形宽度和高度)
img1(Rect(50, 50, 100, 100)) = Scalar(255);
img2(Rect(100, 100, 100, 100)) = Scalar(255);
}
void Show()
{
imshow("mm", img1);
imshow("text", img2);
waitKey(0);
}
void BitOpreations()
{
Mat myand, myor, myxor, mynot;
bitwise_and(img1, img2, myand);
bitwise_or(img1, img2, myor);
bitwise_not(img1, mynot);
bitwise_xor(img1, img2, myxor);
imshow("and", myand);
imshow("or", myor);
imshow("xor", myxor);
imshow("not", mynot);
waitKey(0);
}
protected:
Mat img1;
Mat img2;
};
int main()
{
BitWise* pImg = new BitWise;
pImg->Show();
pImg->BitOpreations();
return 0;
}
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
暂无评论,快来写一下吧
展开评论
您可能感兴趣的博客