OpenCV3入門1—環境搭建與實驗
1、環境搭建
1.1 VS2017開發環境搭建
1)、下載軟體包
https://opencv.org/
2)、配置環境變數
配置win10系統環境變數,把下面路徑新增到path。
D:\WORK\5.OpenCV\opencv\build\x64\vc15\bin
3)、vs屬性配置
配置包含路徑
D:\WORK\5.OpenCV\opencv\build\include\opencv
D:\WORK\5.OpenCV\opencv\build\include\opencv2
配置庫目錄
D:\WORK\5.OpenCV\opencv\build\x64\vc15\lib
配置連結器輸入附加依耐項
opencv_world343d.lib(在D:\WORK\5.OpenCV\opencv\build\x64\vc15\lib下)
1.2 python3環境搭建
python開發環境安裝比較簡單,網上很多例子,不在贅述,基本上pip install opencv-python即可。
2、影象操作—讀、寫、顯示
例:1:讀取影象
#include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; int main() { Mat pic1 = imread("D:/WORK/5.OpenCV/LeanOpenCV/pic_src/pic1.bmp"); namedWindow("pic1"); imshow("pic1", pic1); waitKey(0); }
例2:寫影象
#include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; int main() { Mat mat = Mat(300, 500, CV_8UC1); cout << "rows="<<mat.rows << ",cols=" << mat.cols << endl; for (int i = 0; i < mat.rows; i++) { uchar* row = mat.ptr<uchar>(i); for (int j = 0; j < mat.cols; j++) { row[j] =(uchar) ((j / 20 ) * 10); } } imshow("pic1", mat); imwrite("D:/WORK/5.OpenCV/LeanOpenCV/pic_src/mat.bmp", mat); waitKey(0); }
3、函式分析
Mat有3個重要的方法:
Mat mat = imread(const String* filename, int flags); 讀取影象 imshow(const string winName, InputArray mat); 顯示影象 imwrite(const string& filename, InputArray img); 儲存影象
1) imread
Mat imread(const String& filename,int flags = IMREAD_COLOR) enum { IMREAD_UNCHANGED = -1, // 8 位,彩色或非彩色 IMREAD_GRAYSCALE = 0, // 8 位,灰度 IMREAD_COLOR = 1, //未改變深度、顏色 IMREAD_ANYDEPTH = 2, //任意深度,未改變顏色 IMREAD_ANYCOLOR = 4, //未改變深度,任意顏色 IMREAD_LOAD_GDAL = 8 // 使用 gdaL 驅動程式 };
因為flags是int型的,如果不在上面的列舉中取值,則可以這樣進行。
flags>0:返回3個通道的彩色影象
flags=0:返回灰度影象
flags<0:返回包含Alpha通道的載入的影象
注意,如果使用彩色模式輸入影象,解碼後順序是BGR,而不是通常的RGB。
2) imshow和namedWindow
imshow函式前沒有namedWindow函式則自動執行一個,但是該函式預設建立視窗的引數為cv2.WINDOW_AUTOSIZE,視窗大小會自動適應所顯示的影象,並且不能改變視窗的大小。
cv2.namedWindow("demo" , cv2.WINDOW_NORMAL)
cv2.imshow("demo" , img)
這樣生成的視窗時可以調整大小的,通過改變引數可以得到不同功能的視窗.
視窗大小可以改變 cv2.WINDOW_NORMAL
視窗大小不可以改變 cv2.WINDOW_AUTOSIZE
視窗大小自適應比列 cv2.WINDOW_FREERATIO
視窗大小保持比例 cv2.WINDOW_KEEPRATIO
顯示色彩變成暗色 cv2.WINDOW_GUI_EXPANDED
3) imwrite
CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,
const std::vector<int>& params = std::vector<int>());
第一個引數const String& filename表示需要寫入的檔名,必須要加上字尾。
第二個引數InputArray img表示Mat型別資料。
第三個引數const std::vector& params表示為特定格式儲存的引數編碼,它有一個預設值std::vector< int >(),一般情況下不用寫。
•對於JPEG格式的圖片,這個引數表示從0-100的圖片質量(CV_IMWRITE_JPEG_QUALITY),預設值是95.
•對於PNG格式的圖片,這個引數表示壓縮級別(CV_IMWRITE_PNG_COMPRESSION)從0-9.較高的值意味著更小的尺寸和更長的壓縮時間而預設值是3.
•對於PPM,PGM或PBM格式的圖片,這個引數表示一個二進位制格式標誌(CV_IMWRITE_PXM_BINARY),取值為0或1,而預設值為1.
vector<int> compression_params; compression_params.push_back(CV_IMWRITE_JPEG_QUALITY); compression_params.push_back(100); //圖片質量 imwrite("test2.jpg", img, compression_params);
4、遇到的問題
opencv 一個namedWindow,imshow出現兩個視窗問題?
連結器-輸入-附加依賴項,opencv_worldXXX.lib和opencv_worldXXXd.lib,只需要配置一個就好了。
5、參考文獻
1、《OpenCV3 程式設計入門》 , 電子工業出版社,毛星雨著
尊重原創技術文章,轉載請註明。
https://www.cnblogs.com/pingwen/p/12292630.html