OpenCV3入門(一)環境搭建與實驗


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


免責聲明!

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



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