博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV入门:(三:图片Mask operations)
阅读量:5863 次
发布时间:2019-06-19

本文共 1507 字,大约阅读时间需要 5 分钟。

Mask operations 翻译为中文应该是掩模操作,具体操作步骤就是根据一个操作矩阵(又名kernel)处理图片中的每一个像素点,操作矩阵会根据当前像素点的周围像素来调整当前像素值。

1.示例

以一个增强图片对比度的示例来说明Mask operations。增强对比度的公式如下:

公式左右两边都能实现同样的操作,但是右边矩阵形式看起来更加好看些。

2.测试代码

本文分别使用两种方法实现上述公式:

2.1 实现公式左边

void Sharp(const Mat& Src,Mat& Dst){    //只能处理8位图片    CV_Assert(Src.depth() == CV_8U);    Dst.create(Src.size(),Src.type());    const int nChannel = Src.channels();    //遍历行    for (int j = 1; j < Src.rows - 1; j++)    {        //前一行 当前行 以及下一行的指针        const uchar* pre = Src.ptr
(j - 1); const uchar* cur = Src.ptr
(j); const uchar* next = Src.ptr
(j + 1); //获取结果图像所在行的指针 uchar* output = Dst.ptr
(j); for (int i = nChannel; i < nChannel*(Src.cols - 1); i++) { //使用公式计算后将值保存到输出矩阵中 *output++ = saturate_cast
(5*cur[i] - cur[i-nChannel] - cur[i+nChannel] - pre[i] - next[i]); } } Dst.row(0).setTo(Scalar(0)); Dst.row(Dst.rows - 1).setTo(Scalar(0)); Dst.col(0).setTo(Scalar(0)); Dst.col(Dst.cols - 1).setTo(Scalar(0));}

2.2 OpenCV 自带函数filter2D

void OpenCV_Sharp(const Mat& Src,Mat& Dst){    //初始化"内核"矩阵    Mat Kern = (Mat_
(3,3)<< 0,-1,0, -1,5,-1, 0,-1,0); filter2D(Src,Dst,Src.depth(),Kern);}

3.结果对比

使用Lena图片对两个函数进行测试:

测试结果如下:

原图:

公式实现结果:

OpenCV操作结果

4.结束

转载于:https://www.cnblogs.com/Reyzal/p/5014380.html

你可能感兴趣的文章
EXTJS 4.2 Panel复制
查看>>
IEEE: 安全领域中的大数据分析
查看>>
jQuery控制回车使表单内控件获得焦点
查看>>
Java 动态代理机制分析及扩展,第 1 部分
查看>>
Linux中的shell
查看>>
我的友情链接
查看>>
如何使用TCP/IP与服务器进行通信-一个简单的聊天程序
查看>>
转载 - linux面试题:删除一个目录下的所有文件,但保留一个指定文件
查看>>
spring定时器----JobDetailBean
查看>>
打印机无法连接
查看>>
我的友情链接
查看>>
JS 判断中英文字符长度
查看>>
我的友情链接
查看>>
网络回溯分析技术八大应用之运维评估 故障排查
查看>>
从原理图到pcb的更新
查看>>
Android----xml文件中的控件的id设置
查看>>
global用法详解
查看>>
XP下如何删除附件中的游戏组件
查看>>
政府信息化建设之——微门户和政务微信
查看>>
link href="&lt
查看>>