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

越界处理:

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

基本计算,加减乘除

  1. #include <opencv2/opencv.hpp>
  2. #include <iostream>
  3. using namespace cv;
  4. using namespace std;
  5. int main(int argc, char** argv)
  6. {
  7. Mat src1 = imread("f:/temp/images/WindowsLogo.jpg");
  8. Mat src2 = imread("f:/temp/images/LinuxLogo.jpg");
  9. //namedWindow("003-windowsSrc", WINDOW_AUTOSIZE);
  10. //namedWindow("003-linuxSrc", WINDOW_AUTOSIZE);
  11. //imshow("003-windowsSrc", src1);
  12. //imshow("003-linuxSrc", src2);
  13. /*
  14. Mat dst1;// **
  15. add(src1, src2, dst1);
  16. imshow("add", dst1);
  17. Mat dst2; // 减
  18. subtract(src1, src2, dst2);
  19. imshow("subtract", dst2);
  20. Mat dst3; // 乘
  21. multiply(src1, src2, dst3);
  22. imshow("multiply", dst3);
  23. Mat dst4; // 除
  24. divide(src1, src2, dst4);
  25. imshow("divide", dst4);
  26. */
  27. Mat src = imread("f:/temp/images/butterfly.jpg");
  28. imshow("butterfly.jpg", src);
  29. Mat black = Mat::zeros(src.size(), src.type());
  30. black = Scalar(40, 40, 40);
  31. Mat dst;
  32. // 加或减,改变图像的亮度
  33. //add(src, black, dst);
  34. subtract(src, black, dst);
  35. //imshow("dst", dst);
  36. Mat dst2;
  37. black = Scalar(127, 127, 127);
  38. // 让两个图像以不同的权重相加,然后加上一个常量的值
  39. // 权重可以给负数
  40. addWeighted(src, 1.2, black, 0.5, 0, dst2);
  41. imshow("dst2", dst2);
  42. Mat dst3;
  43. addWeighted(src1, 1, src2, 0.5, 0, dst3);
  44. imshow("src1+src2", dst3);
  45. waitKey(0);
  46. destroyAllWindows();
  47. return 0;
  48. }

基本位操作

  1. #include <opencv2/opencv.hpp>
  2. #include <iostream>
  3. using namespace cv;
  4. using namespace std;
  5. int main(int argc, char** argv)
  6. {
  7. Mat src = imread("f:/images/apple.jpg");
  8. Mat src1 = imread("f:/images/WindowsLogo.jpg");
  9. Mat src2 = imread("f:/images/LinuxLogo.jpg");
  10. imshow("src", src);
  11. // 位操作
  12. // 图像取反
  13. Mat m1;
  14. bitwise_not(src, m1, Mat());
  15. imshow("bitwise_not", m1);
  16. Mat m2;
  17. Mat mask = Mat::zeros(src.size(), CV_8UC1);
  18. // 参照mask的像素值进行取反
  19. // mask如果全是0的话,则不取反
  20. bitwise_not(src, m2, mask);
  21. imshow("bitwise_not---mask", m2);
  22. Mat m3;
  23. Mat mask2 = Mat::zeros(src.size(), CV_8UC1);
  24. int w = src.cols / 2;
  25. int h = src.rows / 2;
  26. for (int row = 0; row < h; row++) {
  27. for (int col = 0; col < w; col++) {
  28. mask2.at<uchar>(row, col) = 255;
  29. }
  30. }
  31. imshow("mask2", mask2);
  32. bitwise_not(src, m3, mask2);
  33. imshow("m3 bitwise_not", m3);
  34. // 与操作
  35. Mat m4;
  36. bitwise_and(src1, src2, m4);
  37. imshow("m4 bitwise_and", m4);
  38. // 或操作
  39. Mat m5;
  40. bitwise_or(src1, src2, m5);
  41. imshow("m5 bitwise_or", m5);
  42. // 异或操作
  43. Mat m6;
  44. bitwise_xor(src1, src2, m6);
  45. imshow("m6 bitwise_xor", m6);
  46. // 参数 mask:取ROI区域
  47. // 位运算的最后一个参数都可以给出一个mask
  48. waitKey(0);
  49. destroyAllWindows();
  50. return 0;
  51. }

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. ubuntu 安装 lnmp 参考

    暂时参考 https://blog.csdn.net/weixin_36025897/article/details/81417458 https://www.jianshu.com/p/37cacd ...

  2. R parallel包实现多线程1

    并行执行 Yes! Well done! Socket clusters are initialized without variables, so a_global_var wasn't found ...

  3. mysql慢日志分析pt-query-digest

    一.pt-query-digest 安装pt-query-digest yum install perl-DBI yum install perl-DBD-MySQL yum install perl ...

  4. 创建本地yum源仓库

    更新本地yum源 yum仓库服务端配置如下 : 1. 创建yum仓库目录 mkdir -p /data/yum_data/ cd /data/yum_data/ #可以上传rpm包到此目录,此目录下面 ...

  5. Java:面向对象的编程语言

    java是面向对象的编程语言 Object,就是指面向对象的对象,对象就是实例. 在java里,对象是类的一个具体实例.就像:人,指一个类.你.我.他.张三.李四.王五等则是一个个具体的实例,也就是j ...

  6. Go_CSP并发模型

    go语言的最大两个亮点,一个是goroutine,一个就是chan了.二者合体的典型应用CSP,基本就是大家认可的并行开发神器,简化了并行程序的开发难度,我们来看一下CSP. 11.1.CSP是什么 ...

  7. ansible笔记(6):常用模块之系统模块

    1.cron模块 cron命令是计划任务功能,与crontab功能类似. 示例:时间格式--->>>分  时  日  月 星期 10 12 27 * *  tar -cvzf log ...

  8. DSP---TI CCSv5.5.x-Windows安装

    TI CCSv5.5.x(正式版)-Windows版本 国内2013年9月13日首发安装CCSv5.5图示 *请关掉防火墙及杀毒软件进行安装 第一步 第二步 安装程序检测到挂起的重新启动,这可能在安装 ...

  9. linux deploy---旧手机变废为宝

    前几天朋友送了我一部红米Note 1s,本来不想要,转念一想,不要白不要,就收了. 拿到之后我就想,这么一个1+8的手机能做什么呢? 翻遍了CSDN和简书,找到了一个性价比不错的方法:给旧手机装上一个 ...

  10. python 字符串是否包含某个子字符串

    方法如下:以后再整理 if str1 in str2: 包含的话,True if str1.find(str2)>=0: 包含的话,返回第一次出现的位置,没有的话为负数 https://www. ...