知识点
像素的算数操作
+add,减subtract,乘multiply,除divide
注意点:图像的数据类型,通道数目,大小必须相同
修改参数来调节图片的参数
void QUickdemo::operators_demo(Mat&image)
{
Mat dst;
dst = image - Scalar(50, 50, 50);--三元素BGR.当改为乘法操作时会出现报错,原因是超过阈值
namedWindow("meitu", WINDOW_FREERATIO);
imshow("meitu", dst);
}
另一种加法
void QUickdemo::operators_demo(Mat&image)
{
Mat dst;
Mat m = Mat::zeros(image.size(), image.type());
m = Scalar(50, 50, 50);
multiply(image, m,dst);
//namedWindow("meitu", WINDOW_FREERATIO);
//imshow("meitu", dst);
int kuan = image.cols;
int gao = image.rows;
int tongdaoshu = image.channels();
//加法
for (int row = 0; row < gao; row++)
{
for (int cot = 0; cot < kuan; cot++)
{
Vec3b p1 = image.at<Vec3b>(row, cot);
Vec3b p2 = m.at<Vec3b>(row, cot);
dst.at<Vec3b>(row, cot) [0] = saturate_cast<uchar>(p1[0]+p2[0]);//若没有uchar函数则有风险就是相加起来的值会超过255,uchar函数有一个功能就是小于0则设定为0,超过255则规定为255.限定在0-255之间
dst.at<Vec3b>(row, cot)[1] = saturate_cast<uchar>(p1[1] + p2[1]);
dst.at<Vec3b>(row, cot)[2] = saturate_cast<uchar>(p1[2] + p2[2]);
}
}
namedWindow("meitu", WINDOW_FREERATIO);
imshow("meitu", dst);
}
乘法计算的代码
void QUickdemo::operators_demo(Mat&image)
{
Mat dst;
Mat m = Mat::zeros(image.size(), image.type());--初始化一个新的图像
m = Scalar(2, 2, 2);
multiply(image, m,dst);--乘法运算,将image和m相乘给dst
namedWindow("meitu", WINDOW_FREERATIO);
imshow("meitu", dst);
}