opencv c++ (3):像素操作2

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;
}
  1. 提升亮度
    提升亮度的方法就是在原图像上加上一个数,可以构造一个同维度固定数值的图像,然后加到原图上,具体操作为:
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);
  1. 提升对比度
    对比度无非是像素之间的差值变得原来越大,办法就是乘一个数,这样差别就变大了
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 参数说明

  1. add() 函数:将两幅图像进行像素级相加操作。

参数说明:

  • src1:第一幅输入图像。
  • src2:第二幅输入图像。
  • dst:输出图像,与输入图像具有相同的尺寸和通道数。
  • mask:可选参数,用于指定操作的区域。

示例代码:

cv::Mat img1, img2, result;
cv::add(img1, img2, result);
  1. subtract() 函数:将两幅图像进行像素级相减操作。

参数说明:

  • src1:第一幅输入图像。
  • src2:第二幅输入图像。
  • dst:输出图像,与输入图像具有相同的尺寸和通道数。
  • mask:可选参数,用于指定操作的区域。

示例代码:

cv::Mat img1, img2, result;
cv::subtract(img1, img2, result);
  1. multiply() 函数:将两幅图像进行像素级相乘操作。

参数说明:

  • src1:第一幅输入图像。
  • src2:第二幅输入图像。
  • dst:输出图像,与输入图像具有相同的尺寸和通道数。
  • scale:可选参数,用于指定乘法的缩放因子。

示例代码:

cv::Mat img1, img2, result;
cv::multiply(img1, img2, result);
  1. divide() 函数:将两幅图像进行像素级相除操作。

参数说明:

  • src1:第一幅输入图像。
  • src2:第二幅输入图像。
  • dst:输出图像,与输入图像具有相同的尺寸和通道数。
  • scale:可选参数,用于指定除法的缩放因子。

示例代码:

cv::Mat img1, img2, result;
cv::divide(img1, img2, result);

这些像素四则运算函数在 OpenCV 中非常常用,可以帮助实现图像的加减乘除操作,用于图像处理和计算机视觉任务中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

idealmu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值