目錄
一,環(huán)境
二,下載和配置 OpenCV
三,創(chuàng)建一個(gè) Visual Studio 項(xiàng)目
四,配置 Visual Studio 項(xiàng)目
五,編寫并編譯 OpenCV 程序
六,解決CMake編譯OpenCV報(bào)的錯(cuò)誤
七,本人編譯好的庫(kù)
一,環(huán)境
- Windows 11 家庭中文版
- Microsoft Visual Studio Community 2022 (64 位) - Current版本 17.5.3
- CMake – 3.24.1
- OpenCV – 4.8.0
二,下載和配置 OpenCV
1.在Windows下安裝OpenCV,通常有兩種選擇
- 使用預(yù)編譯的二進(jìn)制庫(kù)(推薦): 這是最常見的方法。可以從OpenCV官方網(wǎng)站下載已經(jīng)編譯好的二進(jìn)制版本,無(wú)需自己編譯。這些預(yù)編譯庫(kù)已經(jīng)包含了OpenCV的頭文件和庫(kù)文件,可以直接在項(xiàng)目中使用。
- 前往 OpenCV Releases 頁(yè)面 下載最新的版本(選擇Windows版)。
![]()
- 解壓下載的文件到指定路徑下,會(huì)得到一個(gè)文件夾,例如
opencv/build,
內(nèi)容參考如下。![]()
- 從源代碼編譯OpenCV(高級(jí)選項(xiàng)): 如果需要進(jìn)行高級(jí)配置、自定義編譯選項(xiàng)或者希望在Windows上編譯OpenCV的源代碼,可以選擇這種方法。但這通常較為復(fù)雜,需要更多時(shí)間和資源。
- 首先,從OpenCV的 GitHub倉(cāng)庫(kù) 下載源代碼。
- 安裝CMake,可以從?CMake官網(wǎng)?下載并安裝最新的CMake版本,這是一個(gè)用于配置和生成編譯項(xiàng)目的工具。
- 打開CMake GUI,在 “Where is the source code” 中選擇OpenCV的源代碼目錄。在 “Where to build the binaries” 中選擇一個(gè)用于生成編譯結(jié)果的目標(biāo)文件夾,通常建議在源代碼目錄之外創(chuàng)建一個(gè)名為 “build” 的文件夾。
- 點(diǎn)擊 “Configure”?按鈕。CMake將提示選擇生成器,選擇合適的Visual Studio版本(例如,Visual Studio 2022),選擇需要生成的位數(shù)(默認(rèn)為64位)。
- CMake編譯過(guò)程中可能會(huì)報(bào)一些紅色的錯(cuò)誤的提示信息,解決辦法看最后一節(jié)。(可以跳過(guò)這些錯(cuò)誤)
- 配置選項(xiàng):在CMake配置過(guò)程中,可以根據(jù)需要設(shè)置不同的選項(xiàng),如編譯類型、安裝路徑、開啟/關(guān)閉模塊等。確保根據(jù)自己的需求進(jìn)行配置。(網(wǎng)上搜索)
- 點(diǎn)擊 “Generate”?按鈕,這將生成一個(gè)Visual Studio項(xiàng)目文件。
- 打開生成的Visual Studio項(xiàng)目文件(通常是.sln文件),或者點(diǎn)擊CMake界面的“Open Project”。
- 在Visual Studio中,選擇 “Release”?或 “Debug”?配置(根據(jù)需要選擇),然后找到?“CMakeTargets > INSTALL” 文件,右擊該文件選擇 “生成” 選項(xiàng)。這將編譯OpenCV。
- 編譯完成后,可以在生成的目標(biāo)文件夾中找到編譯好的OpenCV庫(kù)文件(通常在
build/install
文件夾下)。- 按照上面方式可以自行構(gòu)建Release/Debug,64/32位的庫(kù)。
2.配置 OpenCV 環(huán)境變量
- 使用鍵盤快捷鍵 Win + R 打開運(yùn)行對(duì)話框。在運(yùn)行對(duì)話框中,輸入
sysdm.cpl
,然后按 Enter 鍵。這將直接打開系統(tǒng)屬性窗口的 “高級(jí)”?選項(xiàng)卡,從那里訪問(wèn)環(huán)境變量配置。- 添加OpenCV的
bin
文件夾路徑,以便系統(tǒng)可以找到OpenCV的DLL文件。例如:D:\Program Files\OpenCV\build\x64\vc16\bin
(請(qǐng)根據(jù)你的實(shí)際路徑進(jìn)行替換)。- 添加OpenCV的
lib
文件夾路徑,以便編譯器和連接器可以找到OpenCV的庫(kù)文件。例如:D:\Program Files\OpenCV\build\x64\vc16\lib
(請(qǐng)根據(jù)你的實(shí)際路徑進(jìn)行替換)。- 確保點(diǎn)擊了 "確定" 按鈕,然后關(guān)閉所有窗口。
![]()
- 打開命令提示符,輸入 opencv_version 命令,檢查OpenCV是否配置成功。如果配置成功,會(huì)輸出OpenCV的版本號(hào),表明OpenCV庫(kù)可在命令行中正常運(yùn)行。
三,創(chuàng)建一個(gè) Visual Studio 項(xiàng)目
使用Visual Studio創(chuàng)建一個(gè)新的C++項(xiàng)目,或者打開一個(gè)現(xiàn)有的項(xiàng)目。
四,配置 Visual Studio 項(xiàng)目
1.跟隨項(xiàng)目進(jìn)行配置(推薦)
- 打開項(xiàng)目屬性,選擇 “配置屬性 > VC++ 目錄”,然后將 “包含目錄” 配置為包含OpenCV的
include
文件夾(opencv\build\include
),將 “庫(kù)目錄” 配置為包含OpenCV的lib
文件夾(opencv\build\x64\vc16\lib
)。![]()
- 在 “配置屬性 > 鏈接器 > 輸入” 下,將 “附加依賴項(xiàng)” 添加要使用的 OpenCV 庫(kù)文件(例如 opencv_world480d.lib)。
![]()
2.全局配置(不推薦)
- 點(diǎn)擊工具欄的 “視圖” 視圖項(xiàng)。展開后點(diǎn)擊 “其它窗口 > 屬性管理器”。
![]()
- 然后會(huì)得到四種不同的模式,在每種模式目錄下會(huì)默認(rèn)有幾個(gè)系統(tǒng)文件,這里對(duì) “xxx.64.user” 系統(tǒng)文件按照前面提到的方式配置當(dāng)前項(xiàng)目以使用這些編譯庫(kù),在這些系統(tǒng)文件中進(jìn)行的屬性配置是全局配置。
- 也可以新添一個(gè)屬性文件,然后也按照前面提到的方式配置當(dāng)前項(xiàng)目以使用這些編譯庫(kù),該屬性文件是保存在當(dāng)前項(xiàng)目目錄下的(這種配置是跟隨項(xiàng)目的,可以對(duì)四種模式都新添一個(gè)屬性文件)。
五,編寫并編譯 OpenCV 程序
以下是一些基本圖像處理程序
1.加載和顯示圖像:創(chuàng)建一個(gè)程序,能夠加載圖像文件并將其顯示在窗口中。
#include <iostream> #include <opencv2/opencv.hpp> //#pragma comment(lib,"opencv_world480d.lib") int main() { // 加載圖像 cv::Mat image = cv::imread("your_image.jpg"); if (image.empty()) { std::cerr << "Error: Could not read image file." << std::endl; return -1; } // 顯示圖像 cv::imshow("My Image", image); cv::waitKey(0); cv::destroyAllWindows(); return 0; }
2.調(diào)整圖像大小:編寫代碼,可以加載圖像并調(diào)整其大小。
#include <iostream> #include <opencv2/opencv.hpp> //#pragma comment(lib,"opencv_world480d.lib") int main() { // 加載圖像 cv::Mat image = cv::imread("your_image.jpg"); if (image.empty()) { std::cerr << "Error: Could not read image file." << std::endl; return -1; } // 調(diào)整圖像大小 cv::Size newSize(800, 600); cv::Mat resizedImage; cv::resize(image, resizedImage, newSize); // 顯示調(diào)整后的圖像 cv::imshow("Resized Image", resizedImage); cv::waitKey(0); cv::destroyAllWindows(); return 0; }
3.應(yīng)用濾波器:學(xué)習(xí)如何應(yīng)用常見的圖像濾波器,例如高斯濾波器。
#include <iostream> #include <opencv2/opencv.hpp> //#pragma comment(lib,"opencv_world480d.lib") int main() { // 加載圖像 cv::Mat image = cv::imread("your_image.jpg"); if (image.empty()) { std::cerr << "Error: Could not read image file." << std::endl; return -1; } // 應(yīng)用高斯濾波 cv::Mat blurredImage; cv::GaussianBlur(image, blurredImage, cv::Size(5, 5), 0); // 顯示模糊圖像 cv::imshow("Blurred Image", blurredImage); cv::waitKey(0); cv::destroyAllWindows(); return 0; }
4.檢測(cè)邊緣:創(chuàng)建一個(gè)程序,用于檢測(cè)圖像中的邊緣。
#include <iostream> #include <opencv2/opencv.hpp> //#pragma comment(lib,"opencv_world480d.lib") int main() { // 加載圖像 cv::Mat image = cv::imread("your_image.jpg"); if (image.empty()) { std::cerr << "Error: Could not read image file." << std::endl; return -1; } // 檢測(cè)邊緣 cv::Mat edges; cv::Canny(image, edges, 100, 200); // 顯示邊緣圖像 cv::imshow("Edge Image", edges); cv::waitKey(0); cv::destroyAllWindows(); return 0; }
5.圖像轉(zhuǎn)換:練習(xí)圖像顏色空間的轉(zhuǎn)換,如將彩色圖像轉(zhuǎn)換為灰度圖像,并將圖像從RGB顏色空間轉(zhuǎn)換為HSV顏色空間。
#include <iostream> #include <opencv2/opencv.hpp> //#pragma comment(lib,"opencv_world480d.lib") int main() { // 加載圖像 cv::Mat image = cv::imread("your_image.jpg"); if (image.empty()) { std::cerr << "Error: Could not read image file." << std::endl; return -1; } // 轉(zhuǎn)換為灰度圖像 cv::Mat grayImage; cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY); // 顯示灰度圖像 cv::imshow("Gray Image", grayImage); cv::waitKey(0); cv::destroyAllWindows(); // 轉(zhuǎn)換為HSV顏色空間 cv::Mat hsvImage; cv::cvtColor(image, hsvImage, cv::COLOR_BGR2HSV); // 分離通道 std::vector<cv::Mat> channels; cv::split(hsvImage, channels); // 顯示H、S、V通道 cv::imshow("Hue Channel", channels[0]); // H通道 cv::imshow("Saturation Channel", channels[1]); // S通道 cv::imshow("Value Channel", channels[2]); // V通道 cv::waitKey(0); cv::destroyAllWindows(); return 0; }
6.要深入理解OpenCV,官網(wǎng)也提供了豐富的示例代碼,如下。
六,解決CMake編譯OpenCV報(bào)的錯(cuò)誤
1.定位問(wèn)題
- 以下錯(cuò)誤表示檢測(cè)到了Python解釋器的版本與期望的版本不符,但這個(gè)錯(cuò)誤可以忽略,不用管
?
- 但后面會(huì)出現(xiàn)很多如下這種錯(cuò)誤,就是不能從指定的鏈接中下載需要的文件資源,詳細(xì)情況可以看 build/CMakeDownloadLog.txt 文件。
?
- CMakeDownloadLog.txt 文件用途:
- CMakeDownloadLog.txt 文件是由CMake工具生成的日志文件,主要用于記錄CMake在下載依賴項(xiàng)和外部資源時(shí)的詳細(xì)信息。
- CMakeDownloadLog.txt 文件對(duì)于排查和調(diào)試依賴項(xiàng)下載問(wèn)題非常有用。當(dāng)在使用CMake配置或構(gòu)建項(xiàng)目時(shí),如果下載依賴項(xiàng)失敗或遇到與外部資源相關(guān)的問(wèn)題,可以查看這個(gè)文件以獲取更多信息,以便進(jìn)一步解決問(wèn)題。
- 打開?CMakeDownloadLog.txt 文件后,會(huì)顯示如下信息,其中的每一段都是我們要解決的錯(cuò)誤:
?
2.分析問(wèn)題
- 先分析這些錯(cuò)誤信息是什么意思,然后我們就很容易的去解決問(wèn)題了,摘取其中一段顯示如下(其它都是類似的問(wèn)題)
?
- 其中紅框的內(nèi)容解釋如下:
- #do_copy:這是一個(gè)命令,表示從指定的URL下載名為 "ffmpeg_version.cmake" 的文件,并將其復(fù)制到本地目錄 "D:/opencv/build/3rdparty/ffmpeg"。并且該文件的MD5哈希值文設(shè)置為 "8862c87496e2e8c375965e1277dee1c7"。
- #missing:這是一條信息,表示在指定的本地目錄中沒有找到名為 "ffmpeg_version.cmake" 的文件。
- #check_md5:這是一條信息,表示檢查名為 "ffmpeg_version.cmake" 文件的MD5哈希值,以驗(yàn)證文件完整性。
- #mismatch_md5:這是一條信息,表示本地文件的MD5哈希值與預(yù)期值 "d41d8cd98f00b204e9800998ecf8427e" 不匹配,說(shuō)明文件可能已損壞或缺失。
- #delete:這是一條命令,表示刪除本地緩存目錄中的文件。
- #cmake_download:這是一條命令,表示嘗試從指定的URL重新下載文件。
- #try 1:這是一條信息,表示這是第一次嘗試下載文件。
- 總的來(lái)說(shuō)
:do_copy
嘗試從指定的URL下載名為 "ffmpeg_version.cmake" 的文件,并保存到本地目錄 "D:/opencv/build/3rdparty/ffmpeg"。首先,它檢查本地目錄中是否已經(jīng)存在文件 "ffmpeg_version.cmake",但沒有找到該文件(missing
)。然后,它嘗試根據(jù)文件的MD5哈希值檢查本地緩存目錄中是否有與下載文件匹配的文件,但發(fā)現(xiàn)MD5哈希值不匹配(mismatch_md5
)。接下來(lái),它嘗試從指定的URL下載文件,并在第一次嘗試時(shí)遇到了網(wǎng)絡(luò)問(wèn)題。- 具體的錯(cuò)誤信息:
# timeout on name lookup is not supported
:
這個(gè)錯(cuò)誤消息表示在進(jìn)行DNS名稱解析時(shí)發(fā)生了超時(shí)錯(cuò)誤。CMake試圖解析主機(jī)名 "raw.githubusercontent.com",但因?yàn)榻馕龀瑫r(shí),所以無(wú)法連接到該主機(jī)。# getaddrinfo(3) failed for raw.githubusercontent.com:443
:
這個(gè)錯(cuò)誤消息表明獲取主機(jī)地址信息失敗,其中 "raw.githubusercontent.com:443" 是要解析的主機(jī)名和端口。# Could not resolve host: raw.githubusercontent.com
:
這個(gè)錯(cuò)誤消息指出無(wú)法解析主機(jī)名 "raw.githubusercontent.com"。# Closing connection 0
:
這是一條信息,表示關(guān)閉了與主機(jī)的連接。- 總結(jié):這些錯(cuò)誤的主要原因是CMake無(wú)法通過(guò)DNS解析找到主機(jī)名 "raw.githubusercontent.com",因此無(wú)法連接到GitHub服務(wù)器以下載所需的文件 "ffmpeg_version.cmake"。
3.解決問(wèn)題文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-713704.html
- 確定了問(wèn)題原因是無(wú)法下載 ffmpeg_version.cmake 文件,瀏覽器輸入指定的URL后,顯示如下信息:
?
- 接下來(lái)就是要下載?ffmpeg_version.cmake 文件,然后覆蓋D:/opencv/source/.cache/ffmpeg/8862c87496e2e8c375965e1277dee1c7-ffmpeg_version.cmake 文件,再進(jìn)行編譯就行了。
七,本人編譯好的庫(kù)
百度網(wǎng)盤鏈接:VS2022編譯的OpenCV庫(kù),四種模式下都可以使用(Release32,Release64,Debug32,Debug64)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-713704.html
到了這里,關(guān)于【配置環(huán)境】Visual Studio 配置 OpenCV的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!