仅自学做笔记用,后续有错误会更改

理论
这里用到的掩膜,其实只是数学中卷积的概念的一个应用

上下左右4个像素值分别乘以-1,再加上中间像素值乘以5的值,最后得到的值再重新赋值给中间像素,这就是掩膜的一个例子
矩阵的掩膜操作比较简单,根据掩膜来重新计算每个像素的像素值,掩膜(mask)也被称为核(kernel)

相关API
CV_Assert(myImage.depth()==CV_8U); // 1.验证深度
Mat.ptr (int i=0); // 2.获取像素矩阵的指针,索引i表示第几行,从0开始
const uchar* pRowData = myImage.ptr(row); // 3.获取某行指针
pRowData[col]; // 4.获取某列指针

代码示例

Mat srcImageMat = cv::imread(...);
int nCols=(srcImageMat.cols-1)*srcImageMat.channels();
int nOffsetx=srcImageMat .channels();
int nRows=srcImageMat.rows;
Mat dstImageMat=Mat::zeros(srcImageMat.size(),srcImageMat.type());
for(int rowindex=1;rowindex<(nRows-1);rowindex++){const uchar* pre=srcImageMat.ptr<uchar>(rowindex-1);const uchar* cur=srcImageMat.ptr<uchar>(rowindex);const uchar* next=srcImageMat.ptr<uchar>(rowindex+1);uchar* output=dstImageMat.ptr<uchar>(rowindex);for(int colindex=nOffsetx;colindex<nCols;colindex++){output[colindex]=saturate_cast<uchar>(5*cur[colindex]-(cur[colindex-nOffsetx]+cur[colindex+nOffsetx]+pre[colindex]+next[colindex]));}
}
nameWindows("Test DstImage",CV_WINDOW_AUTOSIZE);
imshow("Test DstImage",dstImageMat);
// 上述代码中的saturate_cast<uchar>(数值)这个东西的功能是保证其数值在0~255之内,超出部分会相应返回0或255

OpenCV现成的接口调用示例

// 这两步可以表示上边一堆代码的操作
Mat kernel=Mat_<char>(3,3)<<0,-1,0,-1,5,-1,0,-1,0;
filter2D(srcImageMat,dstImageMat,srcImageMat.depth(),kernel);

计算时间消耗

double dOldTime = getTickCount();
Mat kernel=Mat_<char>(3,3)<<0,-1,0,-1,5,-1,0,-1,0;
filter2D(srcImageMat,dstImageMat,srcImageMat.depth(),kernel);
double dTimeConsune = (getTickCount()-dOldTime)/getTickFrequency();

效果截图:

【OpenCV学习】第2课:图片锐化 - 矩阵的掩膜操作(卷积中的锐化算子)相关推荐

  1. 使用Python调用opencv学习(-)打开图片,显示图片

    使用Python调用opencv学习(-)打开图片,显示图片 第一步是读取图片是用cv2.imread 第一个参数是图片的路径可以是绝对路径也可以是相对路径.第二个参数代表读取图片的格式 cv2.IM ...

  2. 独家|OpenCV 1.3 矩阵的掩膜操作(附链接)

    翻译:陈之炎 校对:王可汗.林夕本文约1600字,建议阅读5分钟本文为大家介绍了 OpenCV 矩阵的官方教程. 矩阵的掩膜操作(mask)并不难.主要思路为:根据掩膜矩阵(也称为内核kernel)重 ...

  3. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  4. OpenCV学习笔记(二):3种常用访问图像中像素的方式

    OpenCV学习笔记(二):3种常用访问图像中像素的方式 #include <opencv2/opencv.hpp>using namespace cv; using namespace ...

  5. 转载:矩阵的掩膜操作实现图像对比度调整

    矩阵的掩膜操作实现图像对比度调整 hb707934728 2017-07-04 13:54:17 1170 收藏 最后发布:2017-07-04 13:54:17首发:2017-07-04 13:54 ...

  6. opencv学习笔记1:图片读入,显示与保存(有代码)

    读入图像 cv2.imread(filepath,flags) 说明: filepath文件名 图片路径. 如原始路径为: D:\lesson\2345_image_file_copy_15.jpg ...

  7. OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年

    首先还是要感谢箫鸣朋友在我<OpenCV学习笔记(四十)--再谈OpenCV数据结构Mat详解>的留言,告诉我M.at<float>(3, 3)在Debug模式下运行缓慢,推荐 ...

  8. OpenCV图像处理使用笔记(二)——图像矩阵的掩膜操作

    前言 1.数字图像处理中的掩膜的概念是起源于于PCB制版的过程,在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形"底片"称为掩膜(也称作"掩模" ...

  9. MATLAB 学习笔记(3)MATLAB 矩阵的进阶操作

    目录 MATLAB 矩阵标量操作 实际例子 MATLAB 矩阵的转置 实际例子 MATLAB 串联矩阵 实际例子 MATLAB 矩阵的行列式 MATLAB 逆矩阵 详细例子 MATLAB 矩阵标量操作 ...

最新文章

  1. JSON 序列化和反序列化——JavaScriptSerializer实现
  2. StringBuilder类
  3. 计算机与现代化投稿流程,计算机与现代化投稿须知
  4. MySQL my.cnf file - Found option without preceding group
  5. Bash脚本教程之行操作
  6. (译) JSON-RPC 2.0 规范(中文版)
  7. 前端小知识点(1):undefined和null区别
  8. 算法题存档20190206
  9. 【转】Struts2中json插件的使用
  10. python列表用法大全
  11. VS Code右键运行Open with live Server弹出找不到应用程序
  12. ViewStub你肯定听过,但是这些细节了解吗?
  13. 银河麒麟ARM64 飞腾FT2000 linuxdeployqt linux打包qt
  14. 全方位了解8.0系统下的Handler
  15. python判断闰年程序_python实现闰年
  16. t检验(t-test)临界值表(临界置信水平)
  17. docker安装ng+tomcat+es+kiba+sql
  18. shell中的括号(小括号,中括号,大括号)
  19. html中文字不自动换行 white-space style
  20. 2013-07《信息资源管理 02378》真卷解析,逐题解析+背诵技巧

热门文章

  1. Nodejs自学笔记
  2. python移动端内存、电量监控脚本
  3. python数据分析实例-python数据分析实战
  4. S3 上传大文件 InvalidRange
  5. 武器库Cobalt Strike
  6. C/C++ 字符串转数字函数
  7. Vue2+Spirngboot前后端分离项目(二)
  8. ISACA任命David Samuelson为首席执行官
  9. PAT乙级真题—1026 程序运行时间
  10. 交通工程造价管理毕业论文题目