/*
矩阵的掩膜操作 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. thinkphp 原数据更新

    调用TP的save方法更新数据时,如果新数据与数据库中得数据一致, 那么执行M('table')->save(data)方法时,该方法会返回false.现在的需求是,哪怕用户要更新的数据与原数据 ...

  2. php中global和$GLOBALS最浅显易懂的解释

    官方文档: global指对变量的引用或者叫指针,$GLOBALS则是变量本身: $var1 = 1; $var2 = 2; function fun(){ $GLOBALS['var2'] = &a ...

  3. 状压dp(B - 炮兵阵地 POJ - 1185 )

    题目链接:https://cn.vjudge.net/contest/276236#problem/B 题目大意:略  具体思路:和我的上一篇写状压dp的思路差不多,不过就是这个题相当于上一个题的升级 ...

  4. Spring4笔记9--Spring的事务管理(AOP应用的例子)

    Spring的事务管理: 事务原本是数据库中的概念,在 Dao 层.但一般情况下,需要将事务提升到业务层,即 Service 层.这样做是为了能够使用事务的特性来管理具体的业务.   在 Spring ...

  5. Oracle环境变量与中文显示的问题

    在CentOS(linux)下安装Oracle,对环境变量的设置有一些讲究. 一般我们可以把环境变量设置在/etc/profile文件中: # Oracle SettingsTMP=/tmp; exp ...

  6. Centos7安装FTP突然无法登录

    vi /etc/pam.d/vsftpd //注释掉auth required pam_shells.so session optional pam_keyinit.so force revokeau ...

  7. 60、二叉搜索树的第k个结点

    一.题目 给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 二.解法 package algorithm ...

  8. ubuntu git 简单入门【转】

    转自:http://blog.chinaunix.net/uid-20718384-id-3334859.html 1. 安装 sudo apt-get install git-core 2.  初始 ...

  9. int、long、long long取值范围

    unsigned   int   0-4294967295 int   -2147483648-2147483647 unsigned long 0-4294967295 long   -214748 ...

  10. mysql备份的 三种方式【转】

    备份的本质就是将数据集另存一个副本,但是原数据会不停的发生变化,所以利用备份只能回复到数据变化之前的数据.那变化之后的呢?所以制定一个好的备份策略很重要. 一.备份的目的 做灾难恢复:对损坏的数据进行 ...