一、图像加法

 #include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std; void main(){
Mat img1=imread("E://1.jpg");
Mat img2=imread("E://2.jpg");
Mat dst;//存储结果
imshow("img1",img1);
imshow("img2",img2);
cout<<"img1 "<<int(img1.at<Vec3b>(,)[])<<endl;//img1在坐标(10,10)的蓝色通道的值,强制转成int
cout<<"img2 "<<int(img2.at<Vec3b>(1,1)[])<<endl; dst=img1+img2;//这两个加法效果相同
//add(img1,img2,dst);//注意:这两个加法要求被加的图片尺寸必须一致
//addWeighted(img1,0.5,img2,0.5,0,dst);//按权重相加,下一行dst输出参数为正常参数的一半
cout<<"dst "<<int(dst.at<Vec3b>(1,1)[])<<endl;
imshow("dst",dst);
waitKey();
}

两幅图的(10,10)处蓝色通道值相加大于了255,所以dst值为255,我们换一个小一点的坐标(420,420)试试

二、图像减法

 #include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std; void main(){
Mat img1=imread("E://1.jpg");
Mat img2=imread("E://5.jpg");
Mat dst;//存储结果
imshow("img1",img1);
imshow("img2",img2);
cout<<"img1 "<<int(img1.at<Vec3b>(,)[])<<endl;//img1在坐标(10,10)的蓝色通道的值,强制转成int
cout<<"img2 "<<int(img2.at<Vec3b>(,)[])<<endl; //dst=img1-img2;//这两个减法效果相同 若dst<0,则dst=0
//subtract(img1,img2,dst);//注意:要求被处理图片尺寸一致
absdiff(img1,img2,dst);//若dst<0,则dst=|dst|>=0 用于检测两幅相似图像的不同点,效果比上面的两种减法好
cout<<"dst "<<int(dst.at<Vec3b>(,)[])<<endl;
imshow("dst",dst);
waitKey();
}

三、乘除与或非

     dst=*img1;//增加曝光
dst=img1/;//降低曝光
bitwise_and(img1,img2,dst);//逻辑与,求交集
bitwise_or(img1,img2,dst);//逻辑或,求并集
bitwise_not(img1,dst);//逻辑非,求补集
bitwise_xor(img1,img2,dst);//异或,相同为0,相异为1

opencv学习之路(8)、基本图像运算——加减与或的更多相关文章

  1. 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整

    今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...

  2. (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...

  3. OpenCV学习笔记:如何扫描图像、利用查找表和计时

    目的 我们将探索以下问题的答案: 如何遍历图像中的每一个像素? OpenCV的矩阵值是如何存储的? 如何测试我们所实现算法的性能? 查找表是什么?为什么要用它? 测试用例 这里我们测试的,是一种简单的 ...

  4. OpenCV 学习之路(2) -- 操作像素

    本节内容: 访问像素值 用指针扫描图像 用迭代器扫描图像 编写高效的图像扫描循环 扫描图像并访问相邻像素 实现简单的图像运算 图像重映射 访问像素值 准备工作: 创建一个简单函数,用它在图像中加入椒盐 ...

  5. OpenCV学习笔记(七) 图像金字塔 阈值 边界

    转自: OpenCV 教程 使用 图像金字塔 进行缩放 图像金字塔是视觉运用中广泛采用的一项技术.一个图像金字塔是一系列图像的集合 - 所有图像来源于同一张原始图像 - 通过梯次向下采样获得,直到达到 ...

  6. opencv学习之路(30)、分水岭算法及图像修补

    一.简介 二.分水岭算法 #include "opencv2/opencv.hpp" using namespace cv; void main() { Mat srcImg = ...

  7. opencv学习之路(13)、图像阈值化threshold

    一.图像阈值化简介 二.固定阈值 三.自适应阈值 #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat src ...

  8. opencv学习之路(12)、图像滤波

    一.图像滤波简介 二.方框滤波——boxFilter() #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat ...

  9. opencv学习之路(11)、图像几何变换

    一.图像缩放 #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat src=imread("E:// ...

随机推荐

  1. [xdoj] 1310 DSKer的卡牌游戏

    http://acm.xidian.edu.cn/problem.php?id=1310 1. 这道题可以类比括号匹配,YY和yy是两组可以匹配的信号,当然要注意逻辑是否正确,一开始进行括号匹配算法的 ...

  2. svn中给个地址,然后把自己建立的项目拖进去

    1.首先checkout 那个地址就会得到一个空的文件夹(里面有.svn文件) 2.把你的项目copy一下,粘贴到你chekout的文件夹里面,所有文件都是?,然后选中全部,点击add,然后在comm ...

  3. C#将List<>转换为Json,将DataSet转成List<T>

    转换  参考:https://blog.csdn.net/u011176794/article/details/52670339 参考:https://blog.csdn.net/my98800/ar ...

  4. sqli-labs(五)——盲注(boolean盲注以及时间盲注)

    第八关: 没有查询信息,输入id=1' 报错 ,也没有报错信息,这里应该是个盲注 使用boolean的盲注吧 先判断boolean的盲注可行 输入id=1' and '1'='1' %23 页面正常 ...

  5. 总结docker常用命令

    docker 1docker pull 镜像 2docker ps -a 查看所有容器docker image 查看镜像 3docker rm 容器id 删除容器 docker rm 一次可以指定多个 ...

  6. c# mongo 数组里对象更新

    var queryDetail = new BsonDocument("cNo", doc.cNo);                     queryDetail.AddRan ...

  7. MYSQLi数据访问批量删除

    <link href="../bootstrap.min.css" rel="stylesheet" type="text/css" ...

  8. linux中截取文件的特定字节(去掉utf-8 bom头)

    事出有因,之所以要截取特定字节,是为了给utf-8编码的文件去掉bom头. bom头好去啊,notepad++文本编辑器中就有这个功能啊.可是,问题所在是要编辑的文件太大了,300MB,小电脑卡shi ...

  9. HashMap(JDK1.8)

      四个构造函数: 构造方法只是赋值属性初始值但是不会真正初始化数组表空间,在第一次添加元素时形成数组表空间.这个和以往的jDK1.7之前的不同,1.7之前的都是在构造里初始化了table数组空间. ...

  10. request.getServletPath(),request.getContextPath()

    2018-11-24  16:34:33 1. getServletPath():获取能够与“url-pattern”中匹配的路径,注意是完全匹配的部分,*的部分不包括. 2. getPageInfo ...