Opencv学习笔记(三)----ROIandMask

ROI(region of interest),也就是感兴趣区域。当我们想要只是关注图片的一部分的时候,就可以使用ROI

有两种用法:

一cv::Rect

cv::Rect 表示一个矩形区域,是一个类

常用的构造函数如下:

Rect_ (_Tp _x, _Tp _y, _Tp _width, _Tp _height) //前两个参数表示的是所选区域的左上角的坐标值x和y, 后两个参数表示所选区域的宽和高。

它还有几个方法:

   //左上角的点坐标
    Point_<_Tp> tl() const;
    //右下角的点的坐标
    Point_<_Tp> br() const;

    //尺寸
    Size_<_Tp> size() const;
    //矩形的面积
    _Tp area() const;

当我们向输出的时候,可以这样使用:

Rect myrectangle=Rect(30,30,100,100);
//面积 
cout<<"the area is : "<<myrectangle.area()<<endl;
//左上角坐标
 cout<<"the top left point is : "<<myrectangle.tl()<<endl;
//右下角坐标
 cout<<"the bottom right point is : "<<myrectangle.br()<<endl;
//输出宽
 cout<<"the width is : "<<myrectangle.width<<endl;
//输出高
 cout<<"the height is : "<<myrectangle.height<<endl;
//判断点(x,y)是否在矩形区域内
 cout<<" point is in the rectangle: "<<myrectangle.contains(Point(x,y))<<endl<<endl;

接下来是ROI:

//读入一个图像
cv::Mat img = imread('D:\test.jpg');

//设定感兴趣的区域ROI

cv::Mat m_roi = img(cv::Rect(250,300,100,100));

二使用cv::Range

cv::Range是指感兴趣区域的行和列的范围,

扫描二维码关注公众号,回复: 3699155 查看本文章

cv::Range(Range(row1,row10),Range(cols1,cols10)) 

是指从起始索引到终止索引(不包括终止索引)的一段连续的序列。

下面是一个例子:

#include <opencv2/OpenCV.hpp>

using namespace cv;

using namespace cv;

int main(int argc, char *argv[])
{
//读入一个图像 

cv::Mat img = imread('D:\test.jpg');

//设定感兴趣的区域ROI

cv::Mat m_roi = img(cv::Rect(250,300,100,100));

imshow("the original image",img)

imshow("the ROI",my_roi)

return 0;

}

记得要添加链接库

MASK

mask其实就是对于图像的并操作,我是这么理解的。mask也是跟图片大小的灰度图。如果mask像素为0,则原图像变为0,如果mask像素不为0,那么原图片被保留下来

下面看一个例子:

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

int main()
{
    Mat image, mask;
    Rect r1(20, 20, 220, 320);//ROI
    Mat img1, img2;
    image = imread("l.jpg");
    //设置掩膜,大小与原图片相同的灰度图
    mask = Mat::zeros(image.size(), CV_8UC1);
    //ROI区域设置为白色
    mask(r1).setTo(255);
    img1 = image(r1);//对于image进行掩膜操作
    image.copyTo(img2, mask);

    imshow("Image sequence", image);
    imshow("img1", img1);
    imshow("img2", img2);
    imshow("mask", mask);

    waitKey();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37761077/article/details/83211225
今日推荐