1. 矩阵掩模原理:

矩阵掩模算法feic非常简单,例如将一个3X3的矩阵,一张图像,对图像的每个像素点进行如下操作:

1.分别从左到右,从上到下,每个通道,拿3X3矩阵和原图对应位置做内积,最后得到的值在赋值给zhon中心像素点

简单例子:

通过如下3X3矩阵来做掩模,可以提高图像的对比度

如上图所示,红色是中心像素,从上到下,从左到右对每个像素做同样的处理操作,得到最终结果就是对比度提高之后的输出图像Mat对象。

2.代码实现:

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

using namespace std;
using namespace cv;
int main()
{
    Mat src = imread("E:/4.png");
    Mat dst;
    if (!src.data) {
        cout << "can not load" << endl;
    }
    else {
        cout << "successful" << endl;
    }

    cout << src.cols << endl;
    cout << src.rows << endl;
    cout << src.channels() << endl;

    namedWindow("test1", CV_WINDOW_AUTOSIZE);
    imshow("test1",src);

    //每一列必须乘以通道数,因为有可能为彩色图像,列数为灰度的三倍
    //由于最外围的一圈像素点没办法进行图像掩模,所以减1
    int cols = (src.cols - 1) * src.channels();
    //行为图像的行
    int rows = src.rows;
    int offsetx = src.channels();

    dst = Mat::zeros(src.size(), src.type());
    //row从1开始,rows-1结束,表示不要对最外围的像素点掩模
    for (int row = 1; row < (rows - 1); row++) {
        //通过像素指针,拿到行指针
        const uchar* previous = src.ptr<uchar>(row - 1);
        const uchar* current = src.ptr<uchar>(row);
        const uchar* next = src.ptr<uchar>(row + 1);
        uchar* output = dst.ptr<uchar>(row);
        //col从3开始,因为彩色图像会有三个通道,最外围的像素点不掩模
        //每一个像素有BGR三个通道
        //分别对每个像素的BGR都要分别进行掩模操作
        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]));
        }
    }

/*
    double t = getTickCount();
    Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
    filter2D(src, dst, src.depth(), kernel);
    double time = (getTickCount() - t) / getTickFrequency();
    cout << "use time " << time << endl;
*/
    namedWindow("test2", CV_WINDOW_AUTOSIZE);
    imshow("test2", dst);

    waitKey(0);

}

3.使用filter2D来实现只需要几行代码就可以搞定上面所有操作

    double t = getTickCount();
    Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
    filter2D(src, dst, src.depth(), kernel);
    double time = (getTickCount() - t) / getTickFrequency();
    cout << "use time " << time << endl;

opencv图像处理02-图像矩阵掩模操作相关推荐

  1. 【OpenCV】矩阵掩模操作

      矩阵掩模操作是指根据一个掩码矩阵(也称为内核kernel)重新计算图像中每个像素的值.掩码可以控制改变相邻像素和当前像素对新像素值的影响,从而产生新的图像像素.   本节通过图像锐化来比较图像指针 ...

  2. OpenCv图像处理之图像视频摄像头读取和保存

    OpenCv图像处理之图像视频摄像头读取与保存 使用cv::imread()读取图片 使用cv::imwrite()存储图片 使用cv::VideoCapture::open()读取视频 使用cv:: ...

  3. 《OpenCv视觉之眼》Python图像处理二十一:Opencv图像处理之图像线性变换和非线性变换的方法及原理

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  4. OpenCV图像处理(十一)---图像梯度

    安培定则:也叫右手螺旋定则,是表示电流和电流激发磁场的磁感线方向间关系的定则.通电直导线中的安培定则(安培定则一):用右手握住通电直导线,让大拇指指向电流的方向,那么四指指向就是磁感线的环绕方向:通电 ...

  5. 简单的图像处理——2. 图像的形态学操作:开运算与闭运算

    1. 回顾 在 简单的图像处理--1. 图像的形态学操作:膨胀与腐蚀 中,我们介绍了图像基本的形态学操作--膨胀与腐蚀,同时也利用了Python进行了实现.在这里我们将接着上次的内容,接着描述其它的一 ...

  6. OpenCv图像处理之图像归一化

    OpenCv图像处理之图像归一化 归一化 中心化 标准化 归一化 图像处理中,图像单通道像素值为0~255之间的uchar类型,通常使用min-max归一化将其转化为0~1区间之间,既不会改变数据的分 ...

  7. OpenCV图像处理(2)——形态学操作

    形态学操作 Mat element = getStructuringElement(MORPH_RECT, Size(9, 9)); morphologyEx(InputImage, OutputIm ...

  8. Python OpenCV 图像处理之 图像运算和图像位运算知识补充

    Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧.本篇博客是这个系列的第 51 篇. 该系列文章导航参考:https://blog.csdn.net/hihell/categ ...

  9. Matlab|数字图像处理02|图像的傅里叶变换(平移/旋转性质)及图像的离散余弦变换

    问题1:x,y方向同时平移后频谱有何变化? 答:经过平移后的傅里叶变换幅值图与原图像得到的傅里叶变换幅值图基本相同,平移不改变频谱的幅值. 代码运行结果: 代码: clc; clear all; I= ...

最新文章

  1. 【Python】Radiobutton组件 LabelFrame组件 Entry组件
  2. 科大星云诗社动态20210427
  3. boost::qvm::is_scalar相关的测试程序
  4. java线程的简单例子(Thread and runnable)
  5. 恒生电子实施怎么样_蓝思科技今年来涨幅超166%,消费电子主题基金如何挑选?...
  6. Android 全局字体设置 例如楷体
  7. 苹果手机传照片到电脑_如何将苹果手机的照片和视频导到电脑上?小白看过来哦...
  8. C++ WinExec system 隐藏黑框;清空文件
  9. jQuery.qrcode 生成二维码,并使用 jszip、FileSaver 下载 zip 压缩包至本地。
  10. win7命令提示符下关闭IPv6隧道的方法
  11. Windows API一日一练(17)DialogBox和DialogBoxParam函数
  12. 推荐七个逆天神器APP,让你分分秒秒变优秀
  13. 计算机方向键不能使用,电脑键盘中的数字按键不能用是什么原因?
  14. 武大计算机专硕和学硕,专硕与学硕,到底有什么区别?
  15. 计算机型号win7,教你win7系统电脑内存条型号怎么看
  16. 使用OpenCV对物体搜索检测与识别
  17. 《房债》书中的精髓:现代金融系统让全世界的人同处一艘经济大船上,一些人搞坏了船,所有的人都跟着遭殃。
  18. 网络协议 18 - CDN
  19. 当显示内容过多时的滚屏类Container.java
  20. 分账的使用场景及解决方案

热门文章

  1. ZT——你怎么过河? -在CMM实践中你是否愿意多走1公里-软件工程 CMM与过程改进
  2. 达人篇:5)公差的正态分布与CPK与制程能力(重要)
  3. win7做服务器性能如何,win7如何做服务器配置
  4. Learning C++ No.14【STL No.4】
  5. 微软Win10彻底封杀exFAT/FAT32磁盘,格式化只剩NTFS/REFS
  6. 流利说英语level4_英语流利说level4原文graph?分享一下我的经验?
  7. 腾讯云+CentOS 7.2+python:搭建微信公众号后台入门教程
  8. GET /static/js/jquery-3.5.1.min.js HTTP/1.1 200 89476
  9. Web 3 大会 | 伍鸣博士发表主题演讲
  10. python写闲鱼脚本_自动化篇 - 躺着收钱!闲鱼自动发货机器人来啦~