1. 像素四则运算
-
图像融合:通过 add() 函数可以将两幅图像进行像素级相加操作,实现图像的融合效果。可以用于混合两幅图像,调整图像的透明度等。
-
图像差异:通过 subtract() 函数可以将两幅图像进行像素级相减操作,得到两幅图像之间的差异。可以用于图像对比、背景减除等任务。
-
图像增强:通过 multiply() 函数可以将两幅图像进行像素级相乘操作,实现图像的增强效果。可以用于增强图像的对比度、亮度等。
-
图像除法:通过 divide() 函数可以将两幅图像进行像素级相除操作,实现图像的除法效果。可以用于彩色校正、图像修复等任务。
这些像素四则运算函数可以帮助实现图像处理中的各种操作,提高图像处理的效率和准确性。在计算机视觉、图像处理和机器学习等领域中都有广泛的应用。
以下是具体代码演示结果。
//图像的基本操作2
//运算+-*/
#include <iostream>
#include<opencv.hpp>
#include<opencv2\highgui\highgui.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat src1 = imread("D:/tools2/opencv/sources/samples/data/WindowsLogo.jpg");
Mat src2 = imread("D:/tools2/opencv/sources/samples/data/LinuxLogo.jpg");
if (src1.empty() || src2.empty())
printf("open file failed");
if ((src1.size() != src2.size()) || (src1.type() != src2.type()))
printf("size or type must be euqal");
//add
Mat dst1 = Mat::zeros(src1.size(), src1.type());
add(src1, src2, dst1);
//substract
Mat dst2 = Mat::zeros(src1.size(), src1.type());
subtract(src1, src2, dst2);
//multiply
Mat dst3 = Mat::zeros(src1.size(), src1.type());
multiply(src1, src2, dst3);
//div
Mat dst4 = Mat::zeros(src1.size(), src1.type());
divide(src1, src2, dst4);
//addweigth, src1 * 0.5 + src2 * 0.8
Mat dst5 = Mat::zeros(src1.size(), src1.type());
addWeighted(src1, 0.5, src2, 0.8, 1, dst5);
imshow("src1", src1);
imshow("src2", src2);
imshow("dst1", dst1);
imshow("dst2", dst2);
imshow("dst3", dst3);
imshow("dst4", dst4);
imshow("dst5", dst5);
waitKey(0);
destroyAllWindows();
return 0;
}
- 提升亮度
提升亮度的方法就是在原图像上加上一个数,可以构造一个同维度固定数值的图像,然后加到原图上,具体操作为:
Mat black1 = Mat::zeros(src1.size(), src1.type());
black1 = Scalar(40, 40, 40);
Mat dst6 = Mat::zeros(src1.size(), src1.type());
add(src1, black1, dst6);
- 提升对比度
对比度无非是像素之间的差值变得原来越大,办法就是乘一个数,这样差别就变大了
Mat black2 = Mat::zeros(src1.size(), src1.type());
black2 = Scalar(1.2, 1.2, 1.2);
Mat dst7 = Mat::zeros(src1.size(), src1.type());
multiply(src1, black2, dst7);
这两种技巧避免了遍历图像,直接通过四则运算操作,方便简单
API 参数说明
- add() 函数:将两幅图像进行像素级相加操作。
参数说明:
- src1:第一幅输入图像。
- src2:第二幅输入图像。
- dst:输出图像,与输入图像具有相同的尺寸和通道数。
- mask:可选参数,用于指定操作的区域。
示例代码:
cv::Mat img1, img2, result;
cv::add(img1, img2, result);
- subtract() 函数:将两幅图像进行像素级相减操作。
参数说明:
- src1:第一幅输入图像。
- src2:第二幅输入图像。
- dst:输出图像,与输入图像具有相同的尺寸和通道数。
- mask:可选参数,用于指定操作的区域。
示例代码:
cv::Mat img1, img2, result;
cv::subtract(img1, img2, result);
- multiply() 函数:将两幅图像进行像素级相乘操作。
参数说明:
- src1:第一幅输入图像。
- src2:第二幅输入图像。
- dst:输出图像,与输入图像具有相同的尺寸和通道数。
- scale:可选参数,用于指定乘法的缩放因子。
示例代码:
cv::Mat img1, img2, result;
cv::multiply(img1, img2, result);
- divide() 函数:将两幅图像进行像素级相除操作。
参数说明:
- src1:第一幅输入图像。
- src2:第二幅输入图像。
- dst:输出图像,与输入图像具有相同的尺寸和通道数。
- scale:可选参数,用于指定除法的缩放因子。
示例代码:
cv::Mat img1, img2, result;
cv::divide(img1, img2, result);
这些像素四则运算函数在 OpenCV 中非常常用,可以帮助实现图像的加减乘除操作,用于图像处理和计算机视觉任务中。