【OpenCV学习】第2课:图片锐化 - 矩阵的掩膜操作(卷积中的锐化算子)
仅自学做笔记用,后续有错误会更改
理论
这里用到的掩膜,其实只是数学中卷积的概念的一个应用
上下左右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课:图片锐化 - 矩阵的掩膜操作(卷积中的锐化算子)相关推荐
- 使用Python调用opencv学习(-)打开图片,显示图片
使用Python调用opencv学习(-)打开图片,显示图片 第一步是读取图片是用cv2.imread 第一个参数是图片的路径可以是绝对路径也可以是相对路径.第二个参数代表读取图片的格式 cv2.IM ...
- 独家|OpenCV 1.3 矩阵的掩膜操作(附链接)
翻译:陈之炎 校对:王可汗.林夕本文约1600字,建议阅读5分钟本文为大家介绍了 OpenCV 矩阵的官方教程. 矩阵的掩膜操作(mask)并不难.主要思路为:根据掩膜矩阵(也称为内核kernel)重 ...
- OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co
OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...
- OpenCV学习笔记(二):3种常用访问图像中像素的方式
OpenCV学习笔记(二):3种常用访问图像中像素的方式 #include <opencv2/opencv.hpp>using namespace cv; using namespace ...
- 转载:矩阵的掩膜操作实现图像对比度调整
矩阵的掩膜操作实现图像对比度调整 hb707934728 2017-07-04 13:54:17 1170 收藏 最后发布:2017-07-04 13:54:17首发:2017-07-04 13:54 ...
- opencv学习笔记1:图片读入,显示与保存(有代码)
读入图像 cv2.imread(filepath,flags) 说明: filepath文件名 图片路径. 如原始路径为: D:\lesson\2345_image_file_copy_15.jpg ...
- OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年
首先还是要感谢箫鸣朋友在我<OpenCV学习笔记(四十)--再谈OpenCV数据结构Mat详解>的留言,告诉我M.at<float>(3, 3)在Debug模式下运行缓慢,推荐 ...
- OpenCV图像处理使用笔记(二)——图像矩阵的掩膜操作
前言 1.数字图像处理中的掩膜的概念是起源于于PCB制版的过程,在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形"底片"称为掩膜(也称作"掩模" ...
- MATLAB 学习笔记(3)MATLAB 矩阵的进阶操作
目录 MATLAB 矩阵标量操作 实际例子 MATLAB 矩阵的转置 实际例子 MATLAB 串联矩阵 实际例子 MATLAB 矩阵的行列式 MATLAB 逆矩阵 详细例子 MATLAB 矩阵标量操作 ...
最新文章
- JSON 序列化和反序列化——JavaScriptSerializer实现
- StringBuilder类
- 计算机与现代化投稿流程,计算机与现代化投稿须知
- MySQL my.cnf file - Found option without preceding group
- Bash脚本教程之行操作
- (译) JSON-RPC 2.0 规范(中文版)
- 前端小知识点(1):undefined和null区别
- 算法题存档20190206
- 【转】Struts2中json插件的使用
- python列表用法大全
- VS Code右键运行Open with live Server弹出找不到应用程序
- ViewStub你肯定听过,但是这些细节了解吗?
- 银河麒麟ARM64 飞腾FT2000 linuxdeployqt linux打包qt
- 全方位了解8.0系统下的Handler
- python判断闰年程序_python实现闰年
- t检验(t-test)临界值表(临界置信水平)
- docker安装ng+tomcat+es+kiba+sql
- shell中的括号(小括号,中括号,大括号)
- html中文字不自动换行 white-space style
- 2013-07《信息资源管理 02378》真卷解析,逐题解析+背诵技巧