1. 程式人生 > >(5)opencv的基礎操作和矩陣的掩模操作

(5)opencv的基礎操作和矩陣的掩模操作

簡單 ast ext ostream turn ons out 新的 return

不懂的,可以簡單,看看這個網址:https://blog.csdn.net/xiongwen_li/article/details/78503491

圖片放到了桌面,所以,圖片的路徑就是桌面了,剩余的代碼如下

 1 #include<iostream>
 2 #include<opencv.hpp>
 3 
 4 using namespace std;
 5 using namespace cv;
 6 
 7 int main()
 8 {
 9     //定義兩個位圖的類
10     Mat sour, dest;
11     //將你要弄的圖片讀進來
12     sour=imread("
C:\\Users\\32829\\Desktop\\aa.jpg"); 13 if (!sour.data)//這裏還可以用sour.empty()來檢驗圖片讀入是否正確 14 { 15 cout << "圖片讀入失敗" << endl; 16 return -1; 17 } 18 //創建一個要展示圖片的窗口 19 namedWindow("原圖片展示", 1); 20 imshow("原圖片展示", sour);//進行圖片展示 21 22 //創建一個空的和原圖片大小一樣的圖,並把它賦值給dest
23 dest = Mat::zeros(sour.size(), sour.type()); 24 //圖片的寬度,註意是原圖片的列數減了1,為啥減一,暫時理解為是不考慮圖片的第一列,還得乘以他的管道數 25 int cols = (sour.cols - 1)*sour.channels(); 26 //因為你不考慮他的第一列,所以就設置了一個偏移量,這個變量 27 int offsets = sour.channels(); 28 //圖片的寬度 29 int rows = sour.rows; 30 31 for (int row = 1
; row < (rows-1); row++) 32 { 33 const uchar* current = sour.ptr<uchar>(row);//獲取當前圖片當前行的指針 34 const uchar*privious = sour.ptr<uchar>(row - 1);//獲取圖片上一行行的指針 35 const uchar* next = sour.ptr<uchar>(row + 1);//獲取當前圖片下一行行的指針 36 uchar* output = dest.ptr<uchar>(row);//獲取目標圖片當前行的指針 37 for (int col = offsets; col < cols; col++) 38 { 39 //目的圖片的當前像素點的計算。 saturate_cast<uchar>,這個就是保證你的RGB不溢出,範圍都控制在0-255 40 output[col] = saturate_cast<uchar>(5 * current[col] - (current[col - offsets] + current[col + offsets] + next[col] + privious[col])); 41 } 42 } 43 namedWindow("新的圖片展示"); 44 imshow("新的圖片展示",dest); 45 46 47 48 49 50 waitKey(0); 51 return 1; 52 }

還有一個簡單的代碼,用opencv自己帶的一個函數實現掩膜操作

 1 #include<iostream>
 2 #include<opencv.hpp>
 3 
 4 using namespace std;
 5 using namespace cv;
 6 
 7 int main()
 8 {
 9     //定義兩個位圖的類
10     Mat sour, dest;
11     //將你要弄的圖片讀進來
12     sour=imread("C:\\Users\\32829\\Desktop\\aa.jpg");
13     if (!sour.data)//這裏還可以用sour.empty()來檢驗圖片讀入是否正確
14     {
15         cout << "圖片讀入失敗" << endl;
16         return -1;
17     }
18     //創建一個要展示圖片的窗口
19     namedWindow("原圖片展示", 1);
20     imshow("原圖片展示", sour);//進行圖片展示
21 
22 
23 
24 
25     // 使用Filter2D函數
26     Mat result;
27     Mat kern = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
28     filter2D(sour, dest, sour.depth(), kern);
29 
30 
31     namedWindow("新的圖片展示");
32     imshow("新的圖片展示", dest);
33 
34     waitKey(0);
35     return 1;
36 }

(5)opencv的基礎操作和矩陣的掩模操作