OpenCV之基础学习:矩阵的掩膜操作

根据自己在网课上的学习,记录一些笔记,加深记忆,在这里分享出来,大家一起学习,自己编程能力有限,对于一些专业名词的运用可能不太得当,不过希望能够让自己不断进步。如有不足不严谨之处希望大家指出来。

这一次学习的是矩阵掩膜操作。

1.掩膜操作可以实现图像对比度的调整,使得图像可以锐化,提高图像对比度。

公式为:I(i,j)=5*I(i,j)-[I(i-1,j)+I(i+1,j)+I(i,j-1)+I(i,j+1)]

实质就是如下矩阵:


对应下面的图:


首先了解一下如何获取图像像素指针 :

定义一个uchar类型的指针指向当前行,uchar*currentRow=Mat.ptr<uchar>(row)   行数从0开始,currentRow[col]即使代表像素值p(row, col)。

再掌握一个函数的运用,saturate_cast<uchar>(像素值i),如果i<=0,返回0,如果i>=255,返回255,如果i在0~255之间那么就返回当前值,该函数是确保rgb值范围在0~255之间。

2.自制掩膜

#include <iostream>
#include<opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main(int argc, const char * argv[]) {
    Mat src,dst;
    src=imread("/Users/Meng/Documents/cscpp/Pictures/qinxi.jpg");
    namedWindow("original image",CV_WINDOW_NORMAL);
    imshow("original image", src);
    
    int cols=(src.cols-1)*src.channels();//获取像素的列,三通道
    int offsetx=src.channels();//有几个通道
    int rows=src.rows;//image row
    dst=Mat::zeros(src.size(), src.type());//set the default color into black  是从矩阵的(1,1)开始的所以行列应该写好
    for(int row=1;row<(rows-1);row++){
        const uchar*current=src.ptr<uchar>(row);//get the current row;
        const uchar*previous=src.ptr<uchar>(row-1);//the previous row
        const uchar*next=src.ptr<uchar>(row+1);//the next row;
        uchar*output=dst.ptr<uchar>(row);
        for(int col=offsetx;col<cols;col++){
            output[col]=saturate_cast<uchar>(5*current[col]-(current[col-offsetx]+current[col+offsetx]+previous[col]+next[col]));//use mask kernel to recaculate xiangsu value,then enhance picture contrast
        }
    }
    namedWindow("image after enhance contrast",CV_WINDOW_NORMAL);
    imshow("image after enhance contrast", dst); waitKey(0);return 0;}

3.利用filter2D实现掩膜操作

 filter2D(src,dst,src.depth(),kernel),其中src.depth()可以直接用-1代替,kernel就是矩阵的掩膜。

  Mat kernel=(Mat_<char>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
    filter2D(src, dst, src.depth(), kernel);//src.depth()=-1
    namedWindow("image after enhanced contrast2",CV_WINDOW_NORMAL);
    imshow("image after enhanced contrast2", dst);
    

4.结束语

以上就是矩阵的掩膜操作,还是比较容易理解的,以后可以结合图像模糊的运用使得图像更加精致,大家快上手操作运用一下吧~

最近马上毕业了,自己总爱胡思乱想,希望能有勇气做自己想做的事,坦坦荡荡的样子最好。


  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值