/*
矩阵的掩膜操作 0 掩膜mask 在这里进行增强对比度:
[
[ 0,-1, 0 ],
[-1, 5, -1],
[ 0,-1, 0 ]
]
使用mask滑动图片每一个位置,进行卷积运算
这里这个mask会增强图片的对比度 1 获取图像指针
const uchar* current = Mat对象.ptr<uchar>(row)
获取了 当前图像的 第row行像素的数组 p(row, col) = current[col]
获取了第row行第col列的点 2 像素范围处理 确保值在0到255之间
saturate_cast<uchar>(值)
传入值小于0时候返回0
大于255时候 返回255
在0-255之间 返回正常数 3 定义掩膜
Mat kernel = (Mat_<char>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
定义了一个3*3大小的掩膜,里面的内容:
[
[ 0,-1, 0 ],
[-1, 5, -1],
[ 0,-1, 0 ]
]
4 掩膜运算
filter2D(src, dst, src.depth(), kernel)
src: 原图像
dst: 输出图像
src.depth() 原图像的深度 32 24 8 等
kernel: 掩膜核
*/ #include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv; int main() {
Mat src, dst;
src = imread("d:/图片/m2.jpg"); // 载入原图像
if (!src.data) { // 如果有读取到
printf("没有找到图片");
return -;
}
// 显示原始图像
namedWindow("输入图片", CV_WINDOW_AUTOSIZE);
imshow("输入图片", src); // 输出图像的初始化 与原图像相同,像素值初始化为0
dst = Mat::zeros(src.size(), src.type()); /*
// 手动实现一个掩膜操作 // 图像的宽度 为 宽度*通道数
int cols = (src.cols) * src.channels(); // 列数 宽度
int rows = src.rows; // 行数 高度
int offsetx = src.channels(); // 通道数 存在列里面 // 掩膜操作没有从0 0 开始是为了把边界让开,掩膜是3*3的, 中间一个是目标位置。
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);
for (int col = offsetx; col < cols - offsetx ; col++) {
// 掩膜运算 并且控制像素值在0到255之间
output[col] = saturate_cast<uchar>( // 控制像素值0到255之间
5 * current[col] - // 当前像素值
(
current[col - offsetx] + // 左边像素值
current[col + offsetx] + // 右边像素值
previous[col]+next[col] // 上合下的像素值
)
);
}
} */
// 计算时间花费
double t = getTickCount(); // 调用掩膜运算
// 初始化一个掩膜
Mat kernel = (Mat_<char>(, ) <<
, -, ,
-, , -,
, -, );
filter2D(src, dst, src.depth(), kernel); // 计算时间花费
double time_cost = (getTickCount() - t) /getTickFrequency();
printf("花费时间:%f", time_cost); namedWindow("掩膜操作", CV_WINDOW_AUTOSIZE);
imshow("掩膜操作", dst); waitKey();
return ;
}

opencv 掩膜操作 滤波 卷积核定义 增强对比度 掩膜运算的更多相关文章

  1. OpenCV计算机视觉学习(2)——图像算术运算 & 掩膜mask操作(数值计算,图像融合,边界填充)

    在OpenCV中我们经常会遇到一个名字:Mask(掩膜).很多函数都使用到它,那么这个Mask到底是什么呢,下面我们从图像基本运算开始,一步一步学习掩膜. 1,图像算术运算 图像的算术运算有很多种,比 ...

  2. 跟我一起学opencv 第二课之图像的掩膜操作

    1.掩膜(mask)概念 用选定的图像,图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程.用于覆盖的特定图像或物体称为掩模或模板.光学图像处理中,掩模可以足胶片,滤光片等 ...

  3. openCV - 2. 矩阵的掩膜操作

    获取图像像素指针.掩膜操作解释 获取图像像素指针 CV_Assert(myImage.depth() == CV_8U); Mat.ptr<uchar>(int i=0) 获取像素矩阵的指 ...

  4. opencv掩膜操作

    #include <iostream>#include <opencv2/opencv.hpp> using namespace std;using namespace cv; ...

  5. 《在纹线方向上进行平滑滤波,在纹线的垂直方向上进行锐化滤波》 --Gabor增强的具体实践

    <在纹线方向上进行平滑滤波,在纹线的垂直方向上进行锐化滤波>                                          --Gabor增强的具体实践     一.问 ...

  6. 目标跟踪之粒子滤波---Opencv实现粒子滤波算法

    目标跟踪学习笔记_2(particle filter初探1) 目标跟踪学习笔记_3(particle filter初探2) 前面2篇博客已经提到当粒子数增加时会内存报错,后面又仔细查了下程序,是代码方 ...

  7. OpenCV探索之路(十三):详解掩膜mask

    在OpenCV中我们经常会遇到一个名字:Mask(掩膜).很多函数都使用到它,那么这个Mask到底什么呢? 一开始我接触到Mask这个东西时,我还真是一头雾水啊,也对无法理解Mask到底有什么用.经过 ...

  8. opencv 矩阵操作

    OpenCv矩阵操作 有很多函数有mask,代表掩码,如果某位mask是0,那么对应的src的那一位就不计算,mask要和矩阵/ROI/的大小相等 大多数函数支持ROI,如果图像ROI被设置,那么只处 ...

  9. Java 8新特性-2 接口定义增强

    为了解决当原有的接口中方法不足时,向原有的接口中添加新的方法,该接口下的N多实现类也需要重写该方法的问题!Java8引入了接口定义增强概念! Java8 打破了原有的接口的方法定义: 公共的.抽象的  ...

随机推荐

  1. 【leetcode 简单】 第八十九题 赎金信

    给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成.如果可以构成,返回 true :否则返回 ...

  2. 列表函数&方法

    列表(list)的基本操作,方法及属性.

  3. Python练习-生成器表达式-筛选与运算

    # 编辑者:闫龙 l = [10, 2, 3, 4, 5, 6, 7] l1 = [int(i)**2 for i in l] # 得到一个新列表l1,新列表中每个元素是l中对应每个元素值的平方 pr ...

  4. JS设计模式——9.组合模式

    组合模式概述 组合模式是一种专为创建Web上的动态用户界面量身定制的模式.使用这种模式可以用一条命令在多个对象上激发复杂的递归的行为. 它可以用来把一批子对象组织成树形结构,并且使整棵树都可被遍历.所 ...

  5. 差分约束系统+输出路径(I - Advertisement POJ - 1752 )

    题目链接:https://cn.vjudge.net/contest/276233#problem/I 题目大意:输入k和n,然后输入n行,每一次输入两个数,代表开端和结尾,如果这个区间内点的个数大于 ...

  6. IE安全系列之——RES Protocol

    IE安全系列之--RES Protocol res Protocol用于从一个文件里面提取指定资源.语法为:res://sFile[/sType]/sID 各Token含义: sfile:百分号编码. ...

  7. docker制作镜像步骤

    一.查看宿主机下是否有符合需求的docker镜像 操作命令如下: [root@server4 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZ ...

  8. Django-模板继承、包含和静态文件配置

    一.模板继承 模板继承可以减少页面内容的重复定义,实现页面内容的重用 典型应用:网站的头部.尾部是一样的,这些内容可以定义在父模板中,子模板不需要重复定义 block标签:在父模板中预留区域,在子模板 ...

  9. 002_安装第三方APP好的站点及解除安全与隐私限制

    一.解除安全与隐私限制的任何来源. http://bbs.feng.com/read-htm-tid-10714286.html 接下来,我们就打开终端,然后输入以下命令:   sudo spctl ...

  10. (四)SpringMvc文件上传

    第一节:SpringMvc单文件上传 第二节:SpringMvc多文件上传