Opencv第四讲:分离合并通道
生活随笔
收集整理的這篇文章主要介紹了
Opencv第四讲:分离合并通道
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
前言:
開(kāi)發(fā)環(huán)境:win10 Visual Studio 2017
開(kāi)發(fā)語(yǔ)言:C++
編譯器:Debug X64
Opencv版本:4.1.1
代碼實(shí)現(xiàn):
#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp>using namespace cv; using namespace std;bool MultiChannelBlending();int main() {system("color 0F");if (MultiChannelBlending()){cout << endl << "OK! Please start your performance ! ";}while (1){if (waitKey(100) == 27)break;} }bool MultiChannelBlending() {Mat Background, Bull, Rocket, Celts, Toronto, NewYork, Pelicans;Mat BlueChannelsBackground, BlueChannelsBull, BlueChannelsSpur;Mat GreenChannelsBackground, GreenChannelsCelts, GreenChannelsToronto;Mat RedChannelsBackground,RedChannelsNewYork, RedChannelsPelicans;vector<Mat>ChannelsBackground, ChannelsBull, ChannelsSpur, ChannelsCelts, ChannelsToronto, ChannelsNewYork, ChannelsPelicans;//【1】讀入圖片Background = imread("D:\\vs2017_Project\\5th-Separate_and_combine_channels\\背景.png");Bull = imread("D:\\vs2017_Project\\5th-Separate_and_combine_channels\\bull.png");Rocket = imread("D:\\vs2017_Project\\5th-Separate_and_combine_channels\\火箭.png");Celts = imread("D:\\vs2017_Project\\5th-Separate_and_combine_channels\\凱爾特人.png");Toronto = imread("D:\\vs2017_Project\\5th-Separate_and_combine_channels\\猛龍.png");NewYork = imread("D:\\vs2017_Project\\5th-Separate_and_combine_channels\\NewYork.png");Pelicans = imread("D:\\vs2017_Project\\5th-Separate_and_combine_channels\\鵜鶘.png");//【2】把一個(gè)3通道圖像轉(zhuǎn)換成3個(gè)單通道圖像split(Background, ChannelsBackground);//分離色彩通道split(Bull, ChannelsBull);//分離色彩通道split(Rocket, ChannelsSpur);//分離色彩通道split(Celts, ChannelsCelts);//分離色彩通道split(Toronto, ChannelsToronto);//分離色彩通道split(NewYork, ChannelsNewYork);//分離色彩通道split(Pelicans, ChannelsPelicans);//分離色彩通道//【3】將原圖的某通道引用返回給imageBlueChannel,注意是引用,相當(dāng)于兩者等價(jià),修改其中一個(gè)另一個(gè)跟著變// 【3-1】藍(lán)色通道BlueChannelsBackground = ChannelsBackground.at(0);BlueChannelsBull = ChannelsBull.at(2);BlueChannelsSpur = ChannelsSpur.at(0);// 【3-2】綠色通道GreenChannelsBackground = ChannelsBackground.at(1);GreenChannelsCelts = ChannelsCelts.at(1);GreenChannelsToronto = ChannelsToronto.at(1);// 【3-3】紅色通道RedChannelsBackground = ChannelsBackground.at(2);RedChannelsNewYork = ChannelsNewYork.at(2);RedChannelsPelicans = ChannelsPelicans.at(2);//【4】將原圖的某通道的某坐標(biāo)處下的一塊區(qū)域和logo圖進(jìn)行加權(quán)操作,將得到的混合結(jié)果存到對(duì)應(yīng)背景圖的通道中// 【4-1】藍(lán)色通道addWeighted(BlueChannelsBackground(Rect(0, 220, Bull.cols, Bull.rows)), 1.0, BlueChannelsBull, 0.5, 0,BlueChannelsBackground(Rect(0, 220, Bull.cols, Bull.rows)));addWeighted(BlueChannelsBackground(Rect(0, 0, Rocket.cols, Rocket.rows)), 1.0, BlueChannelsSpur, 0.5, 0,BlueChannelsBackground(Rect(0, 0, Rocket.cols, Rocket.rows)));// 【4-2】綠色通道addWeighted(GreenChannelsBackground(Rect(220, 0, Celts.cols, Celts.rows)), 1.0,GreenChannelsCelts, 0.5, 0, GreenChannelsBackground(Rect(220, 0, Celts.cols, Celts.rows)));addWeighted(GreenChannelsBackground(Rect(220, 220, Toronto.cols, Toronto.rows)), 1.0,GreenChannelsToronto, 0.5, 0, GreenChannelsBackground(Rect(220, 220, Toronto.cols, Toronto.rows)));// 【4-3】紅色通道addWeighted(RedChannelsBackground(Rect(440, 0, NewYork.cols, NewYork.rows)), 1.0, RedChannelsNewYork, 0.5, 0, RedChannelsBackground(Rect(440, 0, NewYork.cols, NewYork.rows)));addWeighted(RedChannelsBackground(Rect(440, 220, Pelicans.cols, Pelicans.rows)), 1.0, RedChannelsPelicans, 0.5, 0, RedChannelsBackground(Rect(440, 220, Pelicans.cols, Pelicans.rows)));//【5】將三個(gè)單通道重新合并成一個(gè)三通道m(xù)erge(ChannelsBackground, Background); // 注意,這里是將三個(gè)合并后的單通道再次合并為一個(gè)三通道,只需要一步操作!//【6】顯示效果圖imshow("NBA", Background);return true; }結(jié)果:
參考資料:
https://blog.csdn.net/poem_qianmo/article/details/21176257
https://blog.csdn.net/gdfsg/article/details/50927257
總結(jié)
以上是生活随笔為你收集整理的Opencv第四讲:分离合并通道的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 解决:Axmath点击更新编号后,会多出
- 下一篇: 长江游艇俱乐部算法题