opencv 掩膜操作 滤波 卷积核定义 增强对比度 掩膜运算
/*
矩阵的掩膜操作 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 掩膜操作 滤波 卷积核定义 增强对比度 掩膜运算的更多相关文章
- OpenCV计算机视觉学习(2)——图像算术运算 & 掩膜mask操作(数值计算,图像融合,边界填充)
在OpenCV中我们经常会遇到一个名字:Mask(掩膜).很多函数都使用到它,那么这个Mask到底是什么呢,下面我们从图像基本运算开始,一步一步学习掩膜. 1,图像算术运算 图像的算术运算有很多种,比 ...
- 跟我一起学opencv 第二课之图像的掩膜操作
1.掩膜(mask)概念 用选定的图像,图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程.用于覆盖的特定图像或物体称为掩模或模板.光学图像处理中,掩模可以足胶片,滤光片等 ...
- openCV - 2. 矩阵的掩膜操作
获取图像像素指针.掩膜操作解释 获取图像像素指针 CV_Assert(myImage.depth() == CV_8U); Mat.ptr<uchar>(int i=0) 获取像素矩阵的指 ...
- opencv掩膜操作
#include <iostream>#include <opencv2/opencv.hpp> using namespace std;using namespace cv; ...
- 《在纹线方向上进行平滑滤波,在纹线的垂直方向上进行锐化滤波》 --Gabor增强的具体实践
<在纹线方向上进行平滑滤波,在纹线的垂直方向上进行锐化滤波> --Gabor增强的具体实践 一.问 ...
- 目标跟踪之粒子滤波---Opencv实现粒子滤波算法
目标跟踪学习笔记_2(particle filter初探1) 目标跟踪学习笔记_3(particle filter初探2) 前面2篇博客已经提到当粒子数增加时会内存报错,后面又仔细查了下程序,是代码方 ...
- OpenCV探索之路(十三):详解掩膜mask
在OpenCV中我们经常会遇到一个名字:Mask(掩膜).很多函数都使用到它,那么这个Mask到底什么呢? 一开始我接触到Mask这个东西时,我还真是一头雾水啊,也对无法理解Mask到底有什么用.经过 ...
- opencv 矩阵操作
OpenCv矩阵操作 有很多函数有mask,代表掩码,如果某位mask是0,那么对应的src的那一位就不计算,mask要和矩阵/ROI/的大小相等 大多数函数支持ROI,如果图像ROI被设置,那么只处 ...
- Java 8新特性-2 接口定义增强
为了解决当原有的接口中方法不足时,向原有的接口中添加新的方法,该接口下的N多实现类也需要重写该方法的问题!Java8引入了接口定义增强概念! Java8 打破了原有的接口的方法定义: 公共的.抽象的 ...
随机推荐
- 42、Java装饰者设计模式
设计模式简介 什么是设计模式?设计模式是可以重复利用的解决方案.软件开发的先驱或者前辈们将之前在开发中遇到的问题进行总结并给出了解决方案,后辈在遇到这些问题之后直接使用这些方案即可解决问题.比如盖高楼 ...
- Python练习-装饰器版-为什么我的用户总被锁定
参考代码如下: 1.用户登录程序流程控制代码: # 编辑者:闫龙 if __name__ == '__main__': import UserLoginFuncation LoclCount=[]; ...
- APScheduler API -- apscheduler.triggers.date
apscheduler.triggers.date API Trigger alias for add_job(): date class apscheduler.triggers.date.Date ...
- js中同步与异步处理方法
在使用异步请求时,有时需要将异步请求的结果返回给另一个js函数,此种情况下会出现未等异步请求返回请求结果,该发送请求所在js函数已经执行完后续操作,即已经执行return ,这样会导致return的结 ...
- C#里partial关键字的作用
1. 什么是局部类型?C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中.局部类型适用于以下情况: (1) 类型特别大,不宜放在一个 ...
- 005_MAC下的VMware fushion快捷键(折中)
由于MAC和VMware Fushion虚拟机之间有一些快捷键的映射,所以Windows虚拟机就找了一个折中的方案.现总结MAC下的win常用快捷键==> <1>最小化窗口(Alt ...
- wordcount在本地运行报错解决:Exception in thread "main" java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.native.NativeID$Windows.access
在windows中的intellij中运行wordcount程序,控制台输出以下报错 在Intellij编辑器中解决办法:本地重新创建NativeIO类,修改一个方法返回值,然后用新建的NativeI ...
- 17 Go Slices: usage and internals GO语言切片: 使用和内部
Go Slices: usage and internals GO语言切片: 使用和内部 5 January 2011 Introduction Go's slice type provides a ...
- pip离线安装
pip freeze > requirements.txt pip download <packages> pip install --no-index --find-links=& ...
- CVE-2010-2883Adobe Reader和Acrobat CoolType.dll栈缓冲区溢出漏洞分析
Adobe Acrobat和Reader都是美国Adobe公司开发的非常流行的PDF文件阅读器. 基于Window和Mac OS X的Adobe Reader和Acrobat 9.4之前的9.x ...