opencv算术操作
Code:
- #include <opencv2\core\core.hpp>
- #include <opencv2\highgui\highgui.hpp>
- #include <opencv2\imgproc\imgproc.hpp>
- #include <iostream>
-
- using namespace std;
- using namespace cv;
-
- Mat addWeight(Mat &image, Mat &image2)
- {
- Mat result;
- //addWeighted(image, 0.5, image2, 0.5, 0.0, result);
- result = image*0.5 + image2*0.5 + 0.3; // 大多数算术函数在opencv2中都有对应的重载操作符
- return result;
- }
-
- Mat addWeight2(Mat &image, Mat &image3)
- {
- Mat result;
- vector<Mat> planes;
- split(image, planes); /// 将一个彩色三通道图像分解为三个单通道图像
- planes[0] += image3;
- merge(planes, result); /// 将三个单通道图像合并为一个彩色三通道图像
- return result;
- }
-
- int main()
- {
- Mat image = imread("F:\\huangrong.jpg", 1);
- if(!image.data){
- cout << "fail to load image" << endl;
- return 0;
- }
- Mat image2 =Mat::zeros(image.rows, image.cols, image.type());
- //Mat image2(image.rows, image.cols, image.type(), Scalar(255, 255, 255));
- Mat result;
- result = addWeight(image, image2);
-
- Mat result2;
- Mat image3 = Mat::zeros(image.rows, image.cols, CV_8UC1);
- result2 = addWeight2(image, image3);
- namedWindow("image");
- imshow("image", image);
- namedWindow("image2");
- imshow("image2", image2);
- namedWindow("result");
- imshow("result", result);
- namedWindow("result2");
- imshow("result2", result2);
- waitKey(0);
- return 0;
- }
Explaination:
(1) 以
上实现的是两幅图像相加,即可用opencv自带的函数addWeighted,也可用重载的运算符+。其它如&,|,^,~等都被重载了。除了
加法,还有其它运算,如矩阵求逆m1.inv(),装置m1.t(),矩阵行列式m1.determinant()等
(2) split(image, planes);和merger(planes,image); 分别是将一个彩色三通道图像分解为三个单通道图像和将三个单通道图像合并为一个彩色三通道图像
Result: