opencv:图像的算术操作
Posted wbyixx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:图像的算术操作的主要内容,如果未能解决你的问题,请参考以下文章