opencv學習日記之單通道分離多通道融合
阿新 • • 發佈:2019-02-08
程式碼:
效果:#include"stdafx.h" #include<iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespace cv; using namespace std; bool LinearBlending(); void splitImage(); void colorReduce(Mat & inputImage, Mat & outputImage, int value1, int valut2, int value3); int main(void) { // 呼叫 bool linearblending = LinearBlending(); cout << linearblending << endl; splitImage(); waitKey(0); return(0); } bool LinearBlending() { // 定義區域性變數 double alphaValue = 0.6; double betaValue; // 讀取圖片,兩個圖片大小尺寸必須一樣 Mat src1, src2, dst; src1 = imread("E:\\pictures\\For_Project\\New_opencv\\newstar.jpg"); src2 = imread("E:\\pictures\\For_Project\\New_opencv\\newgo.jpg"); // 影象混合加權操作 betaValue = 1.0 - alphaValue; addWeighted(src1, alphaValue, src2, betaValue, 0.6, dst); namedWindow("原圖1"); imshow("原圖1", src1); namedWindow("原圖2"); imshow("原圖2", src2); namedWindow("效果"); imshow("效果", dst); return true; } void splitImage() { Mat srcImage = imread("E:\\pictures\\For_Project\\Opencv_Test\\cao.png"); Mat blueImage, greenImage, redImage; vector<Mat> channels; split(srcImage, channels); namedWindow("原圖"); imshow("原圖", srcImage); blueImage = channels.at(0); namedWindow("Blue"); imshow("Blue", blueImage); greenImage = channels.at(1); namedWindow("Green"); imshow("Green", greenImage); redImage = channels.at(2); namedWindow("Red"); imshow("Red", redImage); Mat dst; merge(channels, dst); imshow("合成", dst); Mat imgMix; imgMix.create(600, 800, CV_8UC3); colorReduce(imgMix, imgMix, 255, 0, 0); imshow("Mix", imgMix); } void colorReduce(Mat & inputImage, Mat & outputImage, int value1, int value2, int value3) { // 複製實參到臨時變數 outputImage = inputImage.clone(); // 分別獲取行數和列數 int rowNumber = outputImage.rows; int colNumber = outputImage.cols; // 存取彩色影象畫素 for (int i = 0;i < rowNumber;i++) { for (int j = 0;j < colNumber;j++) { // 藍色通道 outputImage.at<Vec3b>(i, j)[0] = value1; // 綠色通道 outputImage.at<Vec3b>(i, j)[1] = value2; // 紅色通道 outputImage.at<Vec3b>(i, j)[2] = value3; } } }