opencv:图像的算术操作
前提:输入图像的大小和类型必须一致
越界处理:
- 大于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:图像的算术操作的更多相关文章
- OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放
这篇已经写得很好,真心给作者点个赞.题目都是直接转过来的,直接去看吧. Reference Link : http://blog.csdn.net/poem_qianmo/article/detail ...
- 【OpenCV新手教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...
- Opencv 图像叠加 添加水印
Opencv 图像叠加 添加水印 C++: void Mat::copyTo(OutputArray m) const C++: void Mat::copyTo(OutputArray m, Inp ...
- opencv图像读取-imread
前言 图像的读取和保存一定要注意imread函数的各个参数及其意义,尽量不要使用默认参数,否则就像数据格式出现错误(here)一样,很难查找错误原因的: re: 1.opencv图像的读取与保存; 完
- 学习 opencv---(12)OpenCV 图像金字塔:高斯金字塔,拉普拉斯金字塔与图片尺寸缩放
在这篇文章里,我们一起学习下 图像金字塔 的一些基本概念,如何使用OpenCV函数pyrUp和pyrDown 对图像进行向上和向下采样,以及了解专门用于缩放图像尺寸的resize函数的用法.此博文一共 ...
- [OpenCV Qt教程] 在Qt图形界面中显示OpenCV图像的OpenGL Widget(第二部分)
本文译自:http://www.robot-home.it/blog/en/software/tutorial-opencv-qt-opengl-widget-per-visualizzare-imm ...
- [OpenCV Qt教程] 在Qt图形界面中显示OpenCV图像的OpenGL Widget (第一部分)
本文译自:http://www.robot-home.it/blog/en/software/tutorial-opencv-qt-opengl-widget-per-visualizzare-imm ...
- 关于OpenCV图像操作的默认参数问题
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51559490 在使用OpenCV以及其 ...
- OpenCV:OpenCV图像旋转的代码
OpenCV图像旋转的代码 cv::transpose( bfM, bfM ) 前提:使用两个矩阵Mat型进行下标操作是不行的,耗费的时间太长了.直接使用两个指针对拷贝才是王道.不知道和OpenCV比 ...
- Imagelab-0-QT label显示 opencv 图像
Imagelab-0-QT label显示 opencv 图像 opencvc++qtimagelab 开始之前 这其实也是opencv 处理图像的系列, 只是想我们在进一步复杂化我们的代码之前, 每 ...
随机推荐
- npm 配置国内源
淘宝镜像 npm config set registry http://registry.npm.taobao.org
- 怎么编写API和或者自己不属于知识小案例demo程序
再使用一个函数,进行测试的调用,然后进行调用这样就不需要再为makefile什么,还有就是改什么鬼东西烦恼了. 然后把需要的功能进行分解就行了.
- php核心技术与最佳实践--- oop
<?php /** * Created by PhpStorm. * User: cl * Date: 2019/8/12 * Time: 7:08 */ /*oop*/ class Perso ...
- Vue中父组件向子组件echarts传值问题
原文链接:https://blog.csdn.net/Uookic/article/details/80638883?utm_source=copy 问题:当父组件传值给子组件echarts时,发现子 ...
- 搭建Python开发环境(Mac)
准备 Python官网: https://www.python.org/ Python官方文档: https://docs.python.org/ 环境搭建 简介 pipenv是Python官方推荐的 ...
- layui表单之单选框提交
<div class="layui-form-item"> <label class="layui-form-label">状态< ...
- AC3 encoder flow
AC3 encoder flow 如下: 1.input PCM PCM在进入encoder前会使用high pass filter来移除信号的DC部分来达到更有效的编码. 2.Transient d ...
- 如何在IntelliJ Idea中同时启动不同端口的两个实例
在SpringCloud开发过程中需要在一个项目中启用不同的端口,我使用的工具是IDEA 步骤1 创建SpringBoot工程 步骤2 在配置文件中添加如下配置: spring.application ...
- Python代码混淆和加密技术
Python进行商业开发时, 需要有一定的安全意识, 为了不被轻易的逆向. 混淆和加密就有所必要了. 为了增加代码阅读的难度, 源代码的混淆非常必要, 一个在线的Python代码混淆网站. http: ...
- C语言程序设计100例之(27):回旋方阵
例27 回旋方阵 问题描述 编写程序,生成从内到外是连续的自然数排列的回旋方阵.例如,当n=3和n=4时的回旋方阵如下图1所示. 图1 由内到外回旋方阵 输入格式 一个正整数n(1≤n ...