不懂的,可以简单,看看这个网址:https://blog.csdn.net/xiongwen_li/article/details/78503491

图片放到了桌面,所以,图片的路径就是桌面了,剩余的代码如下

 #include<iostream>
#include<opencv.hpp> using namespace std;
using namespace cv; int main()
{
//定义两个位图的类
Mat sour, dest;
//将你要弄的图片读进来
sour=imread("C:\\Users\\32829\\Desktop\\aa.jpg");
if (!sour.data)//这里还可以用sour.empty()来检验图片读入是否正确
{
cout << "图片读入失败" << endl;
return -;
}
//创建一个要展示图片的窗口
namedWindow("原图片展示", );
imshow("原图片展示", sour);//进行图片展示 //创建一个空的和原图片大小一样的图,并把它赋值给dest
dest = Mat::zeros(sour.size(), sour.type());
//图片的宽度,注意是原图片的列数减了1,为啥减一,暂时理解为是不考虑图片的第一列,还得乘以他的管道数
int cols = (sour.cols - )*sour.channels();
//因为你不考虑他的第一列,所以就设置了一个偏移量,这个变量
int offsets = sour.channels();
//图片的宽度
int rows = sour.rows; for (int row = ; row < (rows-); row++)
{
const uchar* current = sour.ptr<uchar>(row);//获取当前图片当前行的指针
const uchar*privious = sour.ptr<uchar>(row - );//获取图片上一行行的指针
const uchar* next = sour.ptr<uchar>(row + );//获取当前图片下一行行的指针
uchar* output = dest.ptr<uchar>(row);//获取目标图片当前行的指针
for (int col = offsets; col < cols; col++)
{
//目的图片的当前像素点的计算。 saturate_cast<uchar>,这个就是保证你的RGB不溢出,范围都控制在0-255
output[col] = saturate_cast<uchar>( * current[col] - (current[col - offsets] + current[col + offsets] + next[col] + privious[col]));
}
}
namedWindow("新的图片展示");
imshow("新的图片展示",dest); waitKey();
return ;
}

还有一个简单的代码,用opencv自己带的一个函数实现掩膜操作

 #include<iostream>
#include<opencv.hpp> using namespace std;
using namespace cv; int main()
{
//定义两个位图的类
Mat sour, dest;
//将你要弄的图片读进来
sour=imread("C:\\Users\\32829\\Desktop\\aa.jpg");
if (!sour.data)//这里还可以用sour.empty()来检验图片读入是否正确
{
cout << "图片读入失败" << endl;
return -;
}
//创建一个要展示图片的窗口
namedWindow("原图片展示", );
imshow("原图片展示", sour);//进行图片展示 // 使用Filter2D函数
Mat result;
Mat kern = (Mat_<char>(, ) << , -, , -, , -, , -, );
filter2D(sour, dest, sour.depth(), kern); namedWindow("新的图片展示");
imshow("新的图片展示", dest); waitKey();
return ;
}

(5)opencv的基础操作和矩阵的掩模操作的更多相关文章

  1. OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)

    PS. 因为csdn博客文章长度有限制,本文有部分内容被截掉了.在OpenCV中文站点的wiki上有可读性更好.而且是完整的版本号,欢迎浏览. OpenCV Wiki :<OpenCV 编程简单 ...

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

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

  3. OpenCV - Operations on Arrays 对数组(矩阵)的一些操作

    Function (函数名) Use (函数用处) add 矩阵加法,A+B的更高级形式,支持mask scaleAdd 矩阵加法,一个带有缩放因子dst(I) = scale * src1(I) + ...

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

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

  5. OpenCV学习笔记(六) 滤波器 形态学操作(腐蚀、膨胀等)

    转自:OpenCV 教程 另附:计算机视觉:算法与应用(2012),Learning OpenCV(2009) 平滑图像:滤波器 平滑 也称 模糊, 是一项简单且使用频率很高的图像处理方法.平滑处理的 ...

  6. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  7. OpenGL的glPushMatrix和glPopMatrix矩阵栈顶操作函数详解

    OpenGL中图形绘制后,往往需要一系列的变换来达到用户的目的,而这种变换实现的原理是又通过矩阵进行操作的.opengl中的变换一般包括视图变换.模型变换.投影变换等,在每次变换后,opengl将会呈 ...

  8. 用状态矩阵解决有序操作的case爆炸问题(转载)

    转自http://qa.baidu.com/blog/?p=167 作者:qabloger 一. 简介 我们在测试中可能都会面对case爆炸问题.有的case组合是无序的,我们可以通过pict[1]组 ...

  9. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

随机推荐

  1. LR、SVM、RF、GBDT、XGBoost和LightGbm比较

    正则化 L1范数 蓝色的是范数的解空间,红色的是损失函数的解空间.L2范数和损失函数的交点处一般在坐标轴上,会使\(\beta=0\),当然并不一定保证交于坐标轴,但是通过实验发现大部分可以得到稀疏解 ...

  2. Ternsorflow 学习:004-MNIST入门 构建模型

    Softmax回归介绍 我们知道MNIST的每一张图片都表示一个数字,从0到9.我们希望得到给定图片代表每个数字的概率.比如说,我们的模型可能推测一张包含9的图片代表数字9的概率是80%但是判断它是8 ...

  3. windows目标进程注入dll

    在别的程序注入dll 步骤: ,获取目标进程ID,CreateToolhelp32Snapshot()函数; ,获取目标进程句柄,OpenProcess()函数; ,目标进程要一块内存,Virtual ...

  4. springboot自定义属性文件与bean映射注入属性值

    主要有几点: 一.导入依赖 springboot的包和: <dependency> <groupId>org.springframework.boot</groupId& ...

  5. win10下pip3安装tesserocr时报错

    使用pip3在线安装tesserocr时报错,刚开始报错内容是提示未安装vs2014,安装完以后报错内容如下 ERROR: Command errored out with exit status 1 ...

  6. CheckBox标签和属性

    CheckBox的作用:可以提供复选 下面是我点击按钮查看所选内容的代码:定义按钮监听器,并在onClick方法中调用shoeAlt方法(此方法会在第二块代码定义) Button btn=(Butto ...

  7. 英语学习 - 进行时态的被动 ( be being done )

    be being done  例: The story book was being read by him .

  8. xv6 锁

    在xv6 中锁对象是 spinlock,spinlock中的locked为1的时候表示被占用,为0的时候锁空闲. struct spinlock { uint locked; // Is the lo ...

  9. x86平台inline hook原理和实现

    概念 inline hook是一种通过修改机器码的方式来实现hook的技术. 原理 对于正常执行的程序,它的函数调用流程大概是这样的: 0x1000地址的call指令执行后跳转到0x3000地址处执行 ...

  10. Vue.js(23)之 keepAlive和activated

    阅读: vue中前进刷新.后退缓存用户浏览数据和浏览位置的实践 keep-alive 组件级缓存 keep-alive <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而 ...