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

知识点

像素的算数操作

+add,减subtract,乘multiply,除divide

注意点:图像的数据类型,通道数目,大小必须相同

修改参数来调节图片的参数

第五节图像像素的算数操作_第1张图片

void  QUickdemo::operators_demo(Mat&image)
{
    Mat dst;
    dst = image - Scalar(50, 50, 50);--三元素BGR.当改为乘法操作时会出现报错,原因是超过阈值
    namedWindow("meitu", WINDOW_FREERATIO);
    imshow("meitu", dst);

}

另一种加法

第五节图像像素的算数操作_第2张图片

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(row, cot);
                Vec3b p2 = m.at(row, cot);
                dst.at(row, cot) [0] = saturate_cast(p1[0]+p2[0]);//若没有uchar函数则有风险就是相加起来的值会超过255,uchar函数有一个功能就是小于0则设定为0,超过255则规定为255.限定在0-255之间
                dst.at(row, cot)[1] = saturate_cast(p1[1] + p2[1]);
                dst.at(row, cot)[2] = saturate_cast(p1[2] + p2[2]);
                


            }

        }
        namedWindow("meitu", WINDOW_FREERATIO);
        imshow("meitu", dst);

    
}



第五节图像像素的算数操作_第3张图片

乘法计算的代码

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

}

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

你可能感兴趣的:(人工智能,linux,运维)