一、顯示圖片:imread, namewindow, imshow, imwriteios
Mat img = imread("1.jpg"); //讀取圖片 Mat mask = imread("2.jpg", 0); //讀取灰度圖片 namedWindow("顯示圖片"); //建立一個名爲「顯示圖片」的窗口 imshow("顯示圖片", img); //將圖片顯示到指定名稱的窗口 imshow("New Window", img); //也能夠不用建立窗口,直接使用函數建立窗口並顯示圖片 imwrite("3.jpg", img); //保存圖片爲指定名稱
二、融合圖片ROI區域並顯示(ROI=Region Of Intrestting):addWeight函數
Mat img1 = imread("1.jpg"); //讀取圖片1 Mat img2 = imread("2.jpg"); //讀取圖片2 Mat rol1 = img1(Rect(0, 0, img2.cols/2, img2.rows)); //獲取圖片1中的ROI區域(感興趣的區域) Mat rol2 = img2(Rect(0, 0, img2.cols/2, img2.rows)); //獲取圖片2中的ROI區域(融合圖片必須尺寸同樣) Mat img; addWeighted(rol1, 0.5, rol2, 0.5, 0, img); //將圖片1和圖片2的ROI融合並保存到img中 addWeighted(rol1, 0.5, rol2, 0.5, 0, rol1); //將圖片1和圖片2的ROI融合後保存到圖片1中 imwrite("tmp.jpg", img); //保存img圖片到磁盤 imshow("img1", img1); //顯示圖片1,其中ROI區域包含融合後的圖像
三、拆分色彩通道和合並色彩通道spa
Mat img1 = imread("1.jpg"); //讀取圖片1 Mat img2 = imread("2.jpg"); //讀取圖片2 vector<Mat> channels1; //用來保存拆分出來的通道向量 vector<Mat> channels2; //用來保存拆分出來的通道向量 split(img1, channels1); //拆分通道向量,根據OpenCV的BGR色彩空間,channels.at(0)爲blue色彩 //imshow("blue", channels.at(0)); //顯示BGR三個通道的色彩圖像 //imshow("green", channels.at(1)); //imshow("red", channels.at(2)); split(img2, channels2); //拆分圖片2的3個通道 Mat& redch = channels1.at(2); //通道融合,這裏只能是單通道相融合,不能將red通道和彩色通道融合,不然程序會異常 //也能夠red通道和blue通道融合,相同通道融合顏色變量,反之色彩變暗 addWeighted(redch, 0.5, channels2.at(0), 0.5, 0, redch); merge(channels1, img1); imshow("NewImg", img1);
示例代碼:rest
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; //顯示圖片 void ReadImgaeAndShow() { Mat img = imread("1.jpg"); //讀取圖片 namedWindow("顯示圖片"); //建立一個名爲「顯示圖片」的窗口 imshow("顯示圖片", img); //將圖片顯示到指定名稱的窗口 imshow("New Window", img); //也能夠不用建立窗口,直接使用函數建立窗口並顯示圖片 imwrite("3.jpg", img); //保存圖片爲指定名稱 } //融合圖片 void ROIAndShowImage() { Mat img1 = imread("1.jpg"); //讀取圖片1 Mat img2 = imread("2.jpg"); //讀取圖片2 Mat rol1 = img1(Rect(0, 0, img2.cols/2, img2.rows)); //獲取圖片1中的ROI區域(感興趣的區域) Mat rol2 = img2(Rect(0, 0, img2.cols/2, img2.rows)); //獲取圖片2中的ROI區域 Mat img; addWeighted(rol1, 0.5, rol2, 0.5, 0, img); //將圖片1和圖片2的ROI融合並保存到img中 addWeighted(rol1, 0.5, rol2, 0.5, 0, rol1); //將圖片1和圖片2的ROI融合後保存到圖片1中 imwrite("tmp.jpg", img); //保存img圖片到磁盤 imshow("img1", img1); //顯示圖片1,其中ROI區域包含融合後的圖像 } //多通道拆分和合並,將圖片2與圖片1的紅色通道融合後合併在一塊兒 void SplitAndMerge() { Mat img1 = imread("1.jpg"); //讀取圖片1 Mat img2 = imread("2.jpg"); //讀取圖片2 vector<Mat> channels1; //用來保存拆分出來的通道向量 vector<Mat> channels2; //用來保存拆分出來的通道向量 split(img1, channels1); //拆分通道向量,根據OpenCV的BGR色彩空間,channels.at(0)爲blue色彩 //imshow("blue", channels.at(0)); //顯示BGR三個通道的色彩圖像 //imshow("green", channels.at(1)); //imshow("red", channels.at(2)); split(img2, channels2); //拆分圖片2的3個通道 Mat& redch = channels1.at(2); //通道融合,這裏只能是單通道相融合,不能將red通道和彩色通道融合,不然程序會異常 //也能夠red通道和blue通道融合,相同通道融合顏色變量,反之色彩變暗 addWeighted(redch, 0.5, channels2.at(0), 0.5, 0, redch); merge(channels1, img1); imshow("NewImg", img1); } int main(int argc, char *argv[]) { //ReadImgaeAndShow(); //ROIAndShowImage(); SplitAndMerge(); while(1) { waitKey(6000); } return 0; }