opencv -掩膜操作

矩阵的掩膜操作

(也可以成为锐化)首先介绍一下什么是掩膜:用选定的对象去覆盖修饰另一个目标对象,使其达到想要的效果。
掩膜操作有两种方法,一种是使用函数filter2D,另一种是遍历数组进行修改。下边分别记忆这两种方法(在这里我省去了一些常规操作,直接开始写关键代码)

int main()
{
Mat src;
src=imread("图片位置");
if(!src.data)
{
   prinft("could not the picture");
   return -1;
}
Mat dst;
dst=Mat::zeros(src.size(),src.type());
Mat kernal=(Mat_<uchar>(3,3)<<0.-1,0,-1,5,-1,0,-1,0);//这里使用的是Mat_模板类。创建了一个卷积核
filter2D(src,dst,-1,kernal);
//......
//输出代码的省略不写
 waitKey(0);
return 0;
}

掩膜操作就是用一个卷积核矩阵,然后对比目标矩阵,然后依次惊醒运算你,把结果放在卷积核中心对应的位置,卷积核矩阵是可以移动的,且中心的位置依次对准目标矩阵的元素,运算后替换掉原元素
顺便介绍一下Mat_模板类的使用,可以是代码更加简洁,减少代码编写过程中的误操作,下面用两个例子来说明

Mat M(200,300, CV_8UC1);
for(int i=;i<M.rows;i++)
//获取指针时需要指定类型
uchar *p=M.ptr<i>;
for(int j=0j<M.cols;j++)
{
double d1 = (double)((i + j) % 255);
//用at获取像素时需要指定数据类型
M.at<uchar>(i,j)=d1;
double d2 = M.at<uchar>(i, j);
}

以上是没有使用Mat_类模板

 //在变量声明时,指定矩阵元素类型
Mat_<uchar> M1== (Mat_<uchar>&)M;
for(int i=0;i<rows;i++)
uchar*p=M1.ptr<i>;
       for(int j=0;j<M1.cols;++j)
       {
            double d1=(double)((i+j)%255);
            //直接使用matlab风格的矩阵元素读写,简洁
            M1(i,j) = d1;
            double d2 = M1(i,j);
        }
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值