OpenCV 图像算术运算
1.图像加法,减法,乘法,除法
#include <opencv2/opencv.hpp>
#inclde <iostream>
int main()
{
//1.图像加法(像素值相加,最大值为255)
cv::Mat img1= cv::imread("dog1.jpg");
cv::Mat img2= cv::imread("dog2.jpg");
cv::Mat addimg3= cv::add(img1,img2);
cv::imshow("add_img" ,addimg3);
cv::waitkey(0);
//2.图像减法(像素值相减,最小值为0)
cv::Mat subtractimg3= cv::subtract(img1,img2);
cv::imshow("subtract_img",subtractimg3);
cv::waitkey(0);
//3.图像乘法(图像的对应像素值相乘)
cv::Mat multiplyimg3= cv::multiply(img1,img2);
cv::imshow("multiply_img",multiplyimg3);
cv::waitkey(0);
//4.图像除法(图像的对应像素值相除)
cv::Mat divideimg3= cv::Mat(img1,img2);
cv::imshow("divide_img",divideimg3);
cv::waitkey(0);
cv::destroyALLWindows();
}
2.图像位运算(与,或,非,异或)
#include <opencv2/opencv.hpp>
#include <iostream>
int main()
{
cv::Mat img1= imread("dog1");
cv::Mat img2= imread("dog2");
//1.按位进行与运算(用于掩码操作,图像分割)
cv::Mat addimg= cv::bitwise_and(img1,img2);
cv::imshow("add_img",addimg);
cv::waitkey(0);
//2.按位进行或运算(用于图像叠加)
cv::Mat orimg= cv::bitwise_or(img1,img2);
cv::imshow("or_img",orimg);
cv::waitkey(0);
//3.按位进行非运算(用于图像反色,单个图像)
cv::Mat notimg= cv::bitwise_not(img1);
cv::imshow("not_img",notimg);
cv::waitkey(0);
//4.按位进行异或运算(用于图像差异检测)
cv::Mat xorimg= cv::bitwise_xor(img1 ,img2);
cv::imshow("xor_img",xorimg);
cv::waitkey(0);
cv::destoryALLWindows();
}
3.图像混合
图像混合是将两幅图像按照一定的权重进行线性组合,生成一幅新的图像。
#include <opencv2/opencv.hpp>
#include <iostream>
int main()
{
cv::Mat img1=cv::imread("1.jpg");
cv::Mat img2=cv::imread("2.jpg");
double alpha = 0.2 // 第一幅图像的权重
double beta = 0.8 // 第二幅图像的权重
double gamma = 0 //可选的标量值
cv::Mat result ;
//混合依据为:
//img*alpha + img2*beta + gamma
cv::addWeighted(img1, alpha, img2, beta, gamma,result);
cv::imshow("addweighted_img",result);
cv::waitkey(0);
cv::destoryALLWindows();
}