zoukankan      html  css  js  c++  java
  • 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"
  • 相关阅读:
    centos7grub2 引导win10
    必测的支付漏洞(一)——使用fiddler篡改支付金额
    使用Fiddler进行IOS APP的HTTP抓包
    Fiddler实现手机抓包——小白入门
    信息收集工具recon-ng详细使用教程
    Chrome浏览器扩展开发系列之一:初识Google Chrome扩展
    Dear Project Manager, I Hate You
    敏捷中的沟通与故事点
    项目经理与敏捷开发
    C#中使用反射获取结构体实例
  • 原文地址:https://www.cnblogs.com/Vince-Wu/p/11093958.html
Copyright © 2011-2022 走看看