获取图像像素指针、掩膜操作解释

获取图像像素指针

  • CV_Assert(myImage.depth() == CV_8U);
  • Mat.ptr<uchar>(int i=0) 获取像素矩阵的指针,索引 i 表示第几行,从0开始计行数。
  • 获得当前行指针const uchar* current= myImage.ptr<uchar>(row );
  • 获取当前像素点P(row, col)的像素值 p(row, col) =current[col]

像素范围处理 saturate_cast<uchar>

  • saturate_cast<uchar>(-100),返回 0。
  • saturate_cast<uchar>(288),返回255
  • saturate_cast<uchar>(100),返回100
  • 这个函数的功能是确保RGB值得范围在0~255之间

掩膜操作实现图像对比度调整

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

函数调用filter2D功能

1. 定义掩膜:``Mat kernel = (Mat_<char>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);``
2. ``filter2D( src, dst, src.depth(), kernel );``其中src与dst是Mat类型变量、src.depth表示位图深度,有32、24、8等

代码演示

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h> using namespace cv; int main(int argc, char** argv) {
// 加载图片
Mat src, dst;
src = imread("D:/vcprojects/images/test.png");
if (!src.data) {
printf("could not load image...\n");
return -1;
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src); int cols = (src.cols-1) * src.channels();
int offsetx = src.channels();
int rows = src.rows; dst = Mat::zeros(src.size(), src.type());
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; col++) { // 像素范围处理
output[col] = saturate_cast<uchar>(5 * current[col] - (current[col- offsetx] + current[col+ offsetx] + previous[col] + next[col]));
}
} double t = getTickCount();
// 调用filter2D
Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, // 定义掩膜
-1, 5, -1,
0, -1, 0);
filter2D(src, dst, src.depth(), kernel); // 相关参数 double timeconsume = (getTickCount() - t) / getTickFrequency();
printf("tim consume %.2f\n", timeconsume); namedWindow("contrast image demo", CV_WINDOW_AUTOSIZE);
imshow("contrast image demo", dst); waitKey(0);
return 0;
}

openCV - 2. 矩阵的掩膜操作的更多相关文章

  1. OpenCV 对矩阵进行掩码操作

    Mask operations on matrices https://docs.opencv.org/master/d7/d37/tutorial_mat_mask_operations.html ...

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

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

  3. opencv 掩膜操作 滤波 卷积核定义 增强对比度 掩膜运算

    /* 矩阵的掩膜操作 0 掩膜mask 在这里进行增强对比度: [ [ 0,-1, 0 ], [-1, 5, -1], [ 0,-1, 0 ] ] 使用mask滑动图片每一个位置,进行卷积运算 这里这 ...

  4. opencv掩膜操作

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

  5. OpenCV学习笔记:矩阵的掩码操作

    矩阵的掩码操作很简单.其思想是:根据掩码矩阵(也称作核)重新计算图像中每个像素的值.掩码矩阵中的值表示近邻像素值(包括该像素自身的值)对新像素值有多大影响.从数学观点看,我们用自己设置的权值,对像素邻 ...

  6. (5)opencv的基础操作和矩阵的掩模操作

    不懂的,可以简单,看看这个网址:https://blog.csdn.net/xiongwen_li/article/details/78503491 图片放到了桌面,所以,图片的路径就是桌面了,剩余的 ...

  7. OpenCV在矩阵上的卷积

    转载请注明出处!!!http://blog.csdn.net/zhonghuan1992 OpenCV在矩阵上的卷积 在openCV官网上说是戴面具,事实上就是又一次计算一下矩阵中的每个value,那 ...

  8. OpenCV利用矩阵实现图像旋转

    利用OpenCV的矩阵操作实现图像的逆时针旋转90度操作 代码 Mat src = imread("C:\\Users\\fenggl\\Desktop\\测试.jpg",MREA ...

  9. Visual Studio 控制台应用程序 同时使用OpenCV和matlab mat文件操作

    matalb具有灵活的图像处理,代码编写起来简洁而高效.而OpenCV具有很多成熟的计算机视觉算法,能够处理很多实时的识别处理等问题,而且代码运行起来效率很高.所以如何结合两者之间的优点,是让很多学术 ...

随机推荐

  1. PHP strip_whitespace() 函数

    实例 返回已删除 PHP 注释以及空白字符的 "test.php" 文件的源代码: <?php// PHP comment /** Another PHP comment*/ ...

  2. 解决 IntelliJ IDEA占用C盘过大空间问题

    原文地址:https://blog.csdn.net/weixin_44449518/article/details/103334235 问题描述: 在保证其他软件缓存不影响C盘可用空间的基础上,当我 ...

  3. Bytom Dapp 开发笔记(二):开发流程

    简介 这章的内容详细分析一下涉及智能合约Dapp的整个开发流程,注意是涉及只能合约,如果你只要一些基本转BTM功能没有太大意义,本内容补充一下官方提供的 比原链DAPP开发流程,详细实践过好踩到的一些 ...

  4. Grazing on the Run 题解

    [题目大意] 大致题意就是,你的初始坐标为\(x\),你要去数轴上的\(n\)个点,问你到达所有点的时间总和最小是多少. 直接贪心肯定不行,所以考虑\(DP\) 先把坐标离散(也就是预处理两点距离\( ...

  5. 06 大数据CentOS6.5mini安装与网络配置

    1. CentOS6.5mini安装 文件>>新建虚拟机 选择自定义,下一步 默认,下一步 选择稍后安装操作系统,下一步 选择CentOS版本,下一步 给虚拟机命名,这个是在VMWare中 ...

  6. 【Linux】linux history命令执行后显示历史命令执行时间

    vim  ~/.bashrc 或者 ~/.bash_profile  或者 获取root权限修改vim /etc/profile 最后添加 export HISTTIMEFORMAT="%F ...

  7. HttpClient 模拟用户操作

    首先模拟用户登录: /** * 模拟用户登录 * */ private void login() throws HttpException, IOException { PostMethod logi ...

  8. CSS 点击img 或者 div 增加抖动(shake)效果

    一般使用场景: 登录的错误验证 或者 强提醒 template 部分 <img id="barcode" :class="{ shaking: toShake}&q ...

  9. golang 数据类型/基础语法

    常量 变量 复合类型 结构体 数组 基础类型 整型 浮点型 复数 bool 值 字符型 字符串 错误(稍微有异议) 引用类型 切片 指针 字典 管道 函数 接口 其他语法结构 包 流程控制 运算符 注 ...

  10. .NET或.NET Core Web APi基于tus协议实现断点续传

    前言 前两天我采用技巧式方案基本实现大文件分片上传,这里只是重点在于个人思路和亲身实践,若在实际生产环境要求比较高的话肯定不行,仍存在一些问题需要深入处理,本文继续在之前基础上给出基于tus协议的轮子 ...