Region of Interest(ROI)

创建一个ROI Mat,包含 50 X 50像素,起点(25,25)

Mat roi(image, Rect(25, 25, 50, 50));

在表征Mat的范围的时候,顺序是 row 然后是 col (先高后宽)。若使用此方法获取ROI,那么在ROI上的操作将直接作用到原图像上。创建的ROI并没有做一个深度copy,如果想要一个真正的copy,使用clone函数

Mat imageCopy = image.clone();

如果想要把感兴趣区域高亮一下,用这样的骚操作

Mat roi(image, Rect(500, 138, 65, 65));
roi = Scalar(0);

这样你的roi就成了一块儿黑炭了。

这里给出一个在图像上放置一个黑色十字的例子

#include <QCoreApplication>
#include "opencv2/opencv.hpp"

using namespace cv;

void crossTrape(Mat &rSrcImage);

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Mat srcImage = imread("c:/users/administrator/desktop/cat.jpg");
    crossTrape(srcImage);

    imshow("output", srcImage);

    return a.exec();
}

void crossTrape(Mat &rSrcImage)
{
    Mat centralCols = rSrcImage.colRange(rSrcImage.cols / 2 - 10, rSrcImage.cols / 2 + 10);
    Mat centralRows = rSrcImage.rowRange(rSrcImage.rows / 2 - 10, rSrcImage.rows / 2 + 10);
    centralCols = Scalar(0);
    centralRows = Scalar(0);
}

效果图

遍历所有像素,整体增亮函数:

void darker(Mat &rSrcImage)
{
    for(int i = 0; i < rSrcImage.rows; i++)
    {
        for(int j = 0; j < rSrcImage.cols; j++)
        {
            rSrcImage.at<Vec3b>(i, j)  = rSrcImage.at<Vec3b>(i, j) * 1.2;
        }
    }
}

效果可以说是很明显了。

OpenCV 提供了一种更加便捷的遍历像素的方法,以后再补充吧,忒难了。

 

posted @ 2018-03-18 18:42  一只大公鸡  阅读(335)  评论(0编辑  收藏  举报