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 提供了一种更加便捷的遍历像素的方法,以后再补充吧,忒难了。

 

转载于:https://www.cnblogs.com/a-cock/p/8596789.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值