1. 程式人生 > >Region of Interest(ROI)

Region of Interest(ROI)

desktop top div rec har ret argc info style

創建一個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 提供了一種更加便捷的遍歷像素的方法,以後再補充吧,忒難了。

Region of Interest(ROI)