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; // 大多數(shù)算術函數(shù)在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) 以
上實現(xiàn)的是兩幅圖像相加,即可用opencv自帶的函數(shù)addWeighted,也可用重載的運算符+。其它如&,|,^,~等都被重載了。除了
加法,還有其它運算,如矩陣求逆m1.inv(),裝置m1.t(),矩陣行列式m1.determinant()等
(2) split(image, planes);和merger(planes,image); 分別是將一個彩色三通道圖像分解為三個單通道圖像和將三個單通道圖像合并為一個彩色三通道圖像
Result: