• OpenCv 005---图像像素的算术操作


    图像像素的四种算术运算:

    1、加:add(src1, src2, addResult);

    2、减:subtract(src1, src2, subResult);

    3、乘:multiply(src1, src2, mulResult);

    4、除:divide(src1, src2, divResult);

    还可以使用以下方式进行:像素之间的 加、减、乘法

    saturateResult.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(b1 * b2);

    saturateResult.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(g1 * g2);

    saturateResult.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(r1 * r2);

    #include "opencv2opencv.hpp"
    #include <iostream>
    
    using namespace std;
    using namespace cv;
    
    int main(int argv, char** argc)
    {
        Mat src1 = imread("G:\CVworkstudy\program_wwx\研习社140课时\ZhaiZhigang140\Blender_Suzanne1.jpg");
        Mat src2 = imread("G:\CVworkstudy\program_wwx\研习社140课时\ZhaiZhigang140\Blender_Suzanne2.jpg");
    
        if (src1.empty()||src2.empty())
        {
            printf("Could not load image src1 or src2...
    ");
            return -1;
        }
        Mat addResult = Mat::zeros(src1.size(), src1.type());
        add(src1, src2, addResult);
        imshow("addResult", addResult);
    
        Mat subResult = Mat::zeros(src1.size(), src1.type());
        subtract(src1, src2, subResult);
        imshow("subResult", subResult);
    
        Mat mulResult = Mat::zeros(src1.size(), src1.type());
        multiply(src1, src2, mulResult);
        imshow("mulResult", mulResult);
    
        Mat divResult = Mat::zeros(src1.size(), src1.type());
        divide(src1, src2, divResult);
        imshow("divResult", divResult);
    
        int b1 = 0, g1 = 0, r1 = 0;
        int b2 = 0, g2 = 0, r2 = 0;
        int b = 0, g = 0, r = 0;
        int height = src1.rows;
        int width = src1.cols;
    
        Mat saturateResult = Mat::zeros(src1.size(), src1.type());
        for (int row = 0; row < height; row++){
            for (int col = 0; col < width; col++) {
                b1 = src1.at<Vec3b>(row, col)[0];
                g1 = src1.at<Vec3b>(row, col)[1];
                r1 = src1.at<Vec3b>(row, col)[2];
    
                b2 = src2.at<Vec3b>(row, col)[0];
                g2 = src2.at<Vec3b>(row, col)[1];
                r2 = src2.at<Vec3b>(row, col)[2];
                saturateResult.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(b1 * b2);
                saturateResult.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(g1 * g2);
                saturateResult.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(r1 * r2);
            }
        }
        imshow("saturateResult", saturateResult);
        
        waitKey(0);
        return 0;
    }

    src1

    src2

    运行结果:

    相加:

    相减:

     相乘:

    相除:

    saturateResult:(相乘)

    One day,I will say "I did it"
  • 相关阅读:
    Qt编写安防视频监控系统1-通道切换
    Qt编写数据可视化大屏界面电子看板12-数据库采集
    Serv-U
    CLAAS KGaA mbH
    法国雷诺
    Bulma
    react技术栈
    小程序开发
    上海hande
    30个极大提高开发效率的VSCode插件
  • 原文地址:https://www.cnblogs.com/Vince-Wu/p/11093958.html
Copyright © 2020-2023  润新知