内容:
1.加减乘除
2.利用加减法调整图像的亮度
3.调整图像亮度与对比度
进行加减乘除的运算,以opencv中自带的windows和linux的logo图像进行实例:
#include
#include
using namespace cv;
using namespace std;
int main(int argc,char** argv)
{
// 读入图像
Mat src1 = imread("/home/bei/Downloads/opencv/samples/data/WindowsLogo.jpg");
Mat src2 = imread("/home/bei/Downloads/opencv/samples/data/LinuxLogo.jpg");
if(src1.empty()||src2.empty())
{
printf("不能找到文件。\n");
return -1;
}
imshow("input1(原图1)",src1);
imshow("input2(原图2)",src2);
// 加
Mat dst;
add(src1,src2,dst);
imshow("add-demo(加)",dst);
// 减
Mat dst1;
subtract(src1,src2,dst1);
imshow("subtract-demo(减)",dst1);
// 乘
Mat dst2;
multiply(src1,src2,dst2);
imshow("multiply-demo(乘)",dst2);
// 除
Mat dst3;
divide(src1,src2,dst3);
imshow("divide-demo(除)",dst3);
waitKey(0);
destroyAllWindows();
return 0;
}
输出结果:
利用一个全黑色空白图像与原图进行叠加。
直接上代码:
#include
#include
using namespace cv;
using namespace std;
int main(int argc,char** argv)
{
// 读入图像
Mat src = imread("../cat.jpg");
imshow("input",src);
Mat black = Mat::zeros(src.size(),src.type());
black = Scalar(40,40,40);
Mat dst1;
add(src,black,dst1);
Mat dst2;
subtract(src,black,dst2);
imshow("加法增加亮度",dst1);
imshow("减法降低亮度",dst2);
waitKey(0);
destroyAllWindows();
return 0;
}
运行结果:
可以明显看出来加减之后与原图的亮度不同。
利用addWeighted这个API来调整。
#include
#include
using namespace cv;
using namespace std;
int main(int argc,char** argv)
{
// 读入图像
Mat src = imread("../cat.jpg");
imshow("input",src);
Mat black = Mat::zeros(src.size(),src.type());
black = Scalar(127,127,127);
Mat dst;
// 修改对比度:将src的像素值乘以1.5
// 修改亮度:black的像素值乘以0.2(可为负数)
// 加上一个值:0.0,得到dst
addWeighted(src,1.5,black,0.2,0.0,dst);
imshow("调整对比度度",dst);
waitKey(0);
destroyAllWindows();
return 0;
}
运行结果:
补充一个小内容:
就是将src和black的权重值换成0.5,会得到类似透明的图像: