Opencv学习笔记(六) -- 图像的扣取

1.涉及函数

1.1 Range()

  • 函数功能
    选定区域
  • 具体定义
inline Range::Range(int _start, int _end)
    : start(_start), end(_end) {}
  • 相关参数
    int _start – 范围起点,包含该点
    int _end – 范围结束点,不包含该店
  • 返回值
    Range – 设定的范围

1.2 operator()

  • 函数功能
    获取图像中的指定区域,该函数为Mat类的一个重载运算符。
  • 具体定义
inline Mat Mat::operator()( Range _rowRange, Range _colRange ) const
{
    return Mat(*this, _rowRange, _colRange);
}
  • 相关参数
    Range _rowRange – 扣取行范围
    iRange _colRange – 扣取列范围
  • 返回值
    Mat – 包含选定行内容的图像矩阵
    注意:
    该函数返回的图像矩阵为原始图像的浅拷贝,改变目标图像矩阵,同样会改变原始图像。

1.3 clone

  • 函数功能
    将图像内容拷贝至目标图像矩阵,该函数为Mat类的一个方法。
  • 具体定义
inline Mat Mat::clone() const
{
    Mat m;
    copyTo(m);
    return m;
}
  • 相关参数
  • 返回值
    Mat – 拷贝后的图像

1.3 colRange

  • 函数功能
    将当前图像内容拷贝至目标图像,该函数为Mat类的一个方法。
  • 具体定义
void copyTo( OutputArray m ) const;
  • 相关参数
    OutputArray m – 目标图像
  • 返回值

2.代码实例

  • 代码说明
    本例主要展示如何对两幅图像进行拼接操作。
  • 测试平台
    1.开发语言:C++
    2.开发工具:VS2015
    3.操作系统:Win7 X64
  • 具体代码
#include <iostream>
using namespace std;

#include "cv.h"
#include "opencv2\opencv.hpp"
using namespace cv;

#if _DEBUG
#pragma comment(lib,"opencv_world340d.lib")
#else
#pragma comment(lib,"opencv_world340.lib")
#endif

int main()
{
    Mat src = imread("D:\\OpencvTest\\lena.jpg");

    if (src.data != NULL)
    {
        Mat tempRoiImg;

        //扣取图像右下角部分
        tempRoiImg = src(Range(src.cols/2,src.cols), Range(src.rows/2, src.rows));

        //为了防止对选定图像的操作影响原始图像,所以进行一次图像克隆操作
        Mat finalRoiImg = tempRoiImg.clone();

        imshow("原始图像", src);

        imshow("右下角图像", finalRoiImg);

        imwrite("D:\\OpencvTest\\roi.jpg", finalRoiImg);
        cvWaitKey(0);
    }
    else
    {
        cout << "图片加载失败,请检查文件是否存在!" << endl;
    }

    getchar();
    return 0;
}


  • 输出截图
    这里写图片描述

栏目导航
上一篇:Opencv学习笔记(五) – 图像的拼接
下一篇:Opencv学习笔记(七) – 图像的灰度化

猜你喜欢

转载自blog.csdn.net/u014337397/article/details/80791565