《OpenCV3编程入门》——5.2.1 感兴趣区域ROI

定义ROI区域有两种方法:

第一种:使用表示矩形区域的Rect。指定矩形的左上角坐标(构造函数的前两个参数)和矩形的长宽(构造函数的后两个参数)。

imageROI = image(Rect(500, 250, logo.cols, logo.rows));

第二种:指定感兴趣行或列的范围(Range)。Range是从起始索引到终止索引(不包括终止索引)的一连续序列。CRange可以用来定义Range。

imageROI = image(Range(250, 250+logoImage.rows), Range(200, 200+logoImage.cols));

下边用一个例子来说明ROI的用法。例子是利用ROI将一幅图加到另一幅图的指定位置。 

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

void main(){
    //读入图像并显示图像
    Mat srcImage = imread("dota_pa.jpg");
    Mat logoImage = imread("dota_logo.jpg");
    if (!srcImage.data)
        cout << "读取srcImage错误!" << endl;
    imshow("dota_pa原始图", srcImage);

    if (!logoImage.data)
        cout << "读取logoImage错误!"<< endl;
    imshow("dota_logo原始图",logoImage);

    //定义一个Mat类型并给其设定ROI区域
    Mat imageROI = srcImage(Rect((srcImage.cols - logoImage.cols), 
                   (srcImage.rows - logoImage.rows), logoImage.cols, logoImage.rows));

    //加载掩模板(灰度图就可以)
    Mat mask = imread("dota_logo.jpg", 0);

    //将掩膜复制到ROI
    logoImage.copyTo(imageROI, mask);
    
    //显示结果
    namedWindow("<1>利用ROI实现图像叠加实例窗口");
    imshow("<1>利用ROI实现图像叠加实例窗口", srcImage);

    waitKey(0);
}

运行结果:

上述代码关于copyTo函数的用法,可参考博文OpenCV中copyTo()函数及Mask详解(附代码详解) 

猜你喜欢

转载自blog.csdn.net/Sophia_11/article/details/84678172
今日推荐