前提:输入图像的大小和类型必须一致

越界处理:

  • 大于255,则会减去255
  • 小于0,则等于0

基本计算,加减乘除

#include <opencv2/opencv.hpp>
#include <iostream> using namespace cv;
using namespace std; int main(int argc, char** argv)
{
Mat src1 = imread("f:/temp/images/WindowsLogo.jpg");
Mat src2 = imread("f:/temp/images/LinuxLogo.jpg");
//namedWindow("003-windowsSrc", WINDOW_AUTOSIZE);
//namedWindow("003-linuxSrc", WINDOW_AUTOSIZE);
//imshow("003-windowsSrc", src1);
//imshow("003-linuxSrc", src2); /*
Mat dst1;// **
add(src1, src2, dst1);
imshow("add", dst1); Mat dst2; // 减
subtract(src1, src2, dst2);
imshow("subtract", dst2); Mat dst3; // 乘
multiply(src1, src2, dst3);
imshow("multiply", dst3); Mat dst4; // 除
divide(src1, src2, dst4);
imshow("divide", dst4);
*/
Mat src = imread("f:/temp/images/butterfly.jpg");
imshow("butterfly.jpg", src);
Mat black = Mat::zeros(src.size(), src.type());
black = Scalar(40, 40, 40);
Mat dst;
// 加或减,改变图像的亮度
//add(src, black, dst);
subtract(src, black, dst);
//imshow("dst", dst); Mat dst2;
black = Scalar(127, 127, 127);
// 让两个图像以不同的权重相加,然后加上一个常量的值
// 权重可以给负数
addWeighted(src, 1.2, black, 0.5, 0, dst2);
imshow("dst2", dst2); Mat dst3;
addWeighted(src1, 1, src2, 0.5, 0, dst3);
imshow("src1+src2", dst3); waitKey(0);
destroyAllWindows(); return 0;
}

基本位操作

#include <opencv2/opencv.hpp>
#include <iostream> using namespace cv;
using namespace std; int main(int argc, char** argv)
{
Mat src = imread("f:/images/apple.jpg");
Mat src1 = imread("f:/images/WindowsLogo.jpg");
Mat src2 = imread("f:/images/LinuxLogo.jpg"); imshow("src", src); // 位操作
// 图像取反
Mat m1;
bitwise_not(src, m1, Mat());
imshow("bitwise_not", m1); Mat m2;
Mat mask = Mat::zeros(src.size(), CV_8UC1);
// 参照mask的像素值进行取反
// mask如果全是0的话,则不取反
bitwise_not(src, m2, mask);
imshow("bitwise_not---mask", m2); Mat m3;
Mat mask2 = Mat::zeros(src.size(), CV_8UC1);
int w = src.cols / 2;
int h = src.rows / 2;
for (int row = 0; row < h; row++) {
for (int col = 0; col < w; col++) {
mask2.at<uchar>(row, col) = 255;
}
}
imshow("mask2", mask2);
bitwise_not(src, m3, mask2);
imshow("m3 bitwise_not", m3); // 与操作
Mat m4;
bitwise_and(src1, src2, m4);
imshow("m4 bitwise_and", m4); // 或操作
Mat m5;
bitwise_or(src1, src2, m5);
imshow("m5 bitwise_or", m5); // 异或操作
Mat m6;
bitwise_xor(src1, src2, m6);
imshow("m6 bitwise_xor", m6); // 参数 mask:取ROI区域
// 位运算的最后一个参数都可以给出一个mask waitKey(0);
destroyAllWindows(); return 0;
}

opencv:图像的算术操作的更多相关文章

  1. OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

    这篇已经写得很好,真心给作者点个赞.题目都是直接转过来的,直接去看吧. Reference Link : http://blog.csdn.net/poem_qianmo/article/detail ...

  2. 【OpenCV新手教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...

  3. Opencv 图像叠加 添加水印

    Opencv 图像叠加 添加水印 C++: void Mat::copyTo(OutputArray m) const C++: void Mat::copyTo(OutputArray m, Inp ...

  4. opencv图像读取-imread

    前言 图像的读取和保存一定要注意imread函数的各个参数及其意义,尽量不要使用默认参数,否则就像数据格式出现错误(here)一样,很难查找错误原因的: re: 1.opencv图像的读取与保存; 完

  5. 学习 opencv---(12)OpenCV 图像金字塔:高斯金字塔,拉普拉斯金字塔与图片尺寸缩放

    在这篇文章里,我们一起学习下 图像金字塔 的一些基本概念,如何使用OpenCV函数pyrUp和pyrDown 对图像进行向上和向下采样,以及了解专门用于缩放图像尺寸的resize函数的用法.此博文一共 ...

  6. [OpenCV Qt教程] 在Qt图形界面中显示OpenCV图像的OpenGL Widget(第二部分)

    本文译自:http://www.robot-home.it/blog/en/software/tutorial-opencv-qt-opengl-widget-per-visualizzare-imm ...

  7. [OpenCV Qt教程] 在Qt图形界面中显示OpenCV图像的OpenGL Widget (第一部分)

    本文译自:http://www.robot-home.it/blog/en/software/tutorial-opencv-qt-opengl-widget-per-visualizzare-imm ...

  8. 关于OpenCV图像操作的默认参数问题

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51559490 在使用OpenCV以及其 ...

  9. OpenCV:OpenCV图像旋转的代码

    OpenCV图像旋转的代码 cv::transpose( bfM, bfM ) 前提:使用两个矩阵Mat型进行下标操作是不行的,耗费的时间太长了.直接使用两个指针对拷贝才是王道.不知道和OpenCV比 ...

  10. Imagelab-0-QT label显示 opencv 图像

    Imagelab-0-QT label显示 opencv 图像 opencvc++qtimagelab 开始之前 这其实也是opencv 处理图像的系列, 只是想我们在进一步复杂化我们的代码之前, 每 ...

随机推荐

  1. C++-POJ2159-Candies[spfa][栈优化][邻接表]

    #include <cstdio> ,N=; struct edge{int v,w,next;}e[M];int head[N],cnt; void add(int u,int v,in ...

  2. 10.3.4参数绑定 bind

    Count_if算法,类似find_if,此函数接受一对迭代器,表示一个输入范围,还接受一个谓词,会对输入范围中的每个元素执行.Count_if返回一个计数值,表示谓词有多少次为真.    使用bin ...

  3. jquery-validation.js验证插件使用详解

    jquery-validation 使用 一.用前必备 官方网站:http://bassistance.de/jquery-plugins/jquery-plugin-validation/ API: ...

  4. mybatis(六):设计模式 - 模板方法模式

  5. centos安装虚拟机,桥接网络连接失败

    centos安装虚拟机,桥接网络连接失败 待办 即使是虚拟机也要在网络选择网桥连接方式之后,点击连接网线才可以,虚拟机都是按照有线进行连接的.

  6. django admin 后台总结(转载)

    https://www.cnblogs.com/wumingxiaoyao/p/6928297.html

  7. 安装pecl

    $ wget http://pear.php.net/go-pear.phar $ php go-pear.phar //php版本 < 7  $ yum install php-pear // ...

  8. 线性回归-Fork

    线性回归 主要内容包括: 线性回归的基本要素 线性回归模型从零开始的实现 线性回归模型使用pytorch的简洁实现   线性回归的基本要素 模型 为了简单起见,这里我们假设价格只取决于房屋状况的两个因 ...

  9. Custom LED Keychain, Small And Surefire Gifts

    The    LED Keychain    makes it easy for people to carry their keys with them and carry them with th ...

  10. 基于SILVACO ATLAS的a-IGZO薄膜晶体管二维器件仿真(01)

    最近因为肺炎的缘故,宅在家里不能出门,就翻了下一些资料,刚好研究方向是这个,就简单研究了下.参考资料主要如下: 1.<半导体工艺和器件仿真软件Silvaco TCAD实用教程> 唐龙谷 2 ...