opencv學習之路(8)、基本圖像運算——加減與或


一、圖像加法

 1 #include<opencv2/opencv.hpp>
 2 #include<iostream>
 3 using namespace cv;
 4 using namespace std;
 5 
 6 void main(){
 7     Mat img1=imread("E://1.jpg");
 8     Mat img2=imread("E://2.jpg");
 9     Mat dst;//存儲結果
10     imshow("img1",img1);
11     imshow("img2",img2);
12     cout<<"img1  "<<int(img1.at<Vec3b>(10,10)[0])<<endl;//img1在坐標(10,10)的藍色通道的值,強制轉成int
13     cout<<"img2  "<<int(img2.at<Vec3b>(10,10)[0])<<endl;
14 
15     dst=img1+img2;//這兩個加法效果相同
16     //add(img1,img2,dst);//注意:這兩個加法要求被加的圖片尺寸必須一致
17     //addWeighted(img1,0.5,img2,0.5,0,dst);//按權重相加,下一行dst輸出參數為正常參數的一半
18     cout<<"dst  "<<int(dst.at<Vec3b>(10,10)[0])<<endl;
19     imshow("dst",dst);
20     waitKey(0);
21 }

兩幅圖的(10,10)處藍色通道值相加大於了255,所以dst值為255,我們換一個小一點的坐標(420,420)試試

二、圖像減法

 1 #include<opencv2/opencv.hpp>
 2 #include<iostream>
 3 using namespace cv;
 4 using namespace std;
 5 
 6 void main(){
 7     Mat img1=imread("E://1.jpg");
 8     Mat img2=imread("E://5.jpg");
 9     Mat dst;//存儲結果
10     imshow("img1",img1);
11     imshow("img2",img2);
12     cout<<"img1  "<<int(img1.at<Vec3b>(10,10)[0])<<endl;//img1在坐標(10,10)的藍色通道的值,強制轉成int
13     cout<<"img2  "<<int(img2.at<Vec3b>(10,10)[0])<<endl;
14 
15     //dst=img1-img2;//這兩個減法效果相同    若dst<0,則dst=0
16     //subtract(img1,img2,dst);//注意:要求被處理圖片尺寸一致
17     absdiff(img1,img2,dst);//若dst<0,則dst=|dst|>=0    用於檢測兩幅相似圖像的不同點,效果比上面的兩種減法好
18     cout<<"dst  "<<int(dst.at<Vec3b>(10,10)[0])<<endl;
19     imshow("dst",dst);
20     waitKey(0);
21 }

 三、乘除與或非

1     dst=5*img1;//增加曝光
2     dst=img1/5;//降低曝光
3     bitwise_and(img1,img2,dst);//邏輯與,求交集
4     bitwise_or(img1,img2,dst);//邏輯或,求並集
5     bitwise_not(img1,dst);//邏輯非,求補集
6     bitwise_xor(img1,img2,dst);//異或,相同為0,相異為1    

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM