(5)opencv的基礎操作和矩陣的掩模操作
阿新 • • 發佈:2018-12-26
簡單 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 //創建一個空的和原圖片大小一樣的圖,並把它賦值給dest23 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的基礎操作和矩陣的掩模操作