• Opencv利用ROI将一张图片叠加到另一幅图像的指定位置


    机器配置为:VS2013+opencv2.4.13+Win-64bit。
    ===========================分割线========================
    本节将利用ROI将一幅图像叠加到另一幅图像的指定位置。
    具体过程见下面代码
    =======================分割线========================
    代码演示

     1 /*
     2     利用ROI将一幅图像叠加到另一幅图像的指定位置
     3 */
     4  
     5 #include <opencv2/core/core.hpp>    
     6 #include <opencv2/highgui/highgui.hpp>    
     7 #include <opencv2/imgproc/imgproc.hpp>   
     8 #include <iostream>  
     9 using namespace std;
    10 using namespace cv;
    11  
    12 int main()
    13 {
    14     //【1】读入两幅图像并检查图像是否读取成功  
    15     Mat srcImage = imread("D:\OutPutResult\ImageTest\dog1.jpg");
    16     Mat signal = imread("D:\OutPutResult\ImageTest\signal.jpg");
    17     if (!srcImage.data || !signal.data)
    18     {
    19         cout << "读取图像有误,请重新输入正确路径!
    ";
    20         return false;
    21     }
    22     imshow("【萌宠】", srcImage);
    23     imshow("【信号】", signal);
    24  
    25     //【2】定义一个Mat类型并给其设定ROI区域
    26     Mat imageROI = srcImage(Rect(450, 20, signal.cols, signal.rows));    //450,20为自定义起始点坐标
    27     //【3】加载掩模(必须是灰度图)
    28     Mat mask = imread("D:\OutPutResult\ImageTest\signal.jpg", 0);    //参数0显示为灰度图
    29     //【4】将掩模复制到ROI
    30     signal.copyTo(imageROI, mask);
    31     //【5】显示结果
    32     namedWindow("利用ROI实现图像叠加");
    33     imshow("利用ROI实现图像叠加", srcImage);
    34     waitKey(0);
    35     return 0;
    36 }

    ==========================分割线============================
    显示结果

    =========================分割线======================

    程序说明
    我们会看到程序里有这么一行代码
     1 signal.copyTo(imageROI, mask); 
    括号里,第一个参数表示为输出图像,第二参数表示为掩码(or掩模)。
    我们也可以将这部分内容这么改,见下图:

    改后的就不带mask参数,其结果显示都是一样的,那么如何理解带mask参数的这种方式呢?
    答:对于形如函数srcImage.copyto(dstImage, mask),mask作为一个掩模板。
    函数会检测mask中如果在某个像素点(i, j)其值为1(只看第一通道,所以mask单通道即可)则把srcImage.at(i, j)处的值直接赋给dstImage.at(i, j);如果其值为0则dstImage.at(i, j)处保留其原始像素值。
    ===============================END============================

    尊重文章著作,此文来源地址:https://blog.csdn.net/sinat_36264666/article/details/77414835

  • 相关阅读:
    如何为创建大量实例节省内存?
    4-5
    4-6
    4-4
    4-3
    4-2
    3-11
    4-1
    3-10
    3-8
  • 原文地址:https://www.cnblogs.com/qiantao/p/9446869.html
Copyright © 2020-2023  润新知