第五节图像像素的算数操作

知识点

像素的算数操作

+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);

}

个人理解,若有不对,请多指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值