版本
Qt 6.6.0 win11 x86_64
安裝 CMake
網(wǎng)址: https://cmake.org/download/
選擇對應的版本下載
將 cmake.exe 所在的 bin 目錄添加到環(huán)境變量中
安裝 openCV
網(wǎng)址: https://opencv.org/releases/
選擇對應的版本下載 Source資源包
- 解壓 “opencv-4.9.0.zip”, 將其解壓的 “opencv-4.9.0” 存放到指定路徑 “Path” (例如在我的電腦上 “Path” 則為 “I:\opencv-4.9.0”)
- 在解壓的文件夾下新建一個 build 目錄
-
打開 /cmake/bin/cmake-gui.exe
在紅線處入 “Path”
選擇將其編譯在 build 目錄下
- 點擊 configure
出現(xiàn)配置對話框->在“Specify the generator for this project”內(nèi)選擇“MinGW Makefiles”選項,
在下邊的編譯器類型中,選擇:
“Specify native compilers”,單擊“Next”->在編譯器選擇器選擇界面,在C后面選擇C編譯路徑(我的為D:\qt\qt6\Tools\mingw1120_64\bin\gcc.exe"),同理選擇C++編譯器路徑,點擊 Finshed, 點擊 configure
- 待配置完成后,點擊 Add Entry (若下面的列表中已經(jīng)有 QT_MAKE_EXECUTABLE這一項則直接雙擊修改即可)
Name: 處填入 QT_MAKE_EXECUTABLE
Type: 選擇 PATH
Value: 填入 Qt 的 qmake路徑 (我的為 “D:\qt\qt6\6.4.3\mingw_64\bin\qmake.exe”)
Description: 空
- 在下面的列表中搜索 WITH_QT WITH_OPENGL,將其勾選;搜索 WITH_IPP,將其取消勾選
- 設置 Qt5Concurrent_DIR, Qt5Core_DIR, Qt5Gui_DIR, Qt5Test_DIR,
Qt5Widgets_DIR, Qt5OpenGL_DIR, CMAKE_BUILD_TYPE (我的是Qt6)
使用 m i n g w 編譯時 使用 mingw 編譯時 使用mingw編譯時,不要勾選 BUILD_opencv_world ,否則很可能會編譯失敗
- 點擊 configure
-
進入 “Path”\下的 build 目錄, 打開一個 CMakeDownloadLog的文本文件。(我的電腦上是 “I:\opencv-4.9.0\build\CMakeDownloadLog.txt”)
例如:#do_copy "opencv_videoio_ffmpeg.dll" "9b755ecbbade0a5b78332e9b4ef2dd1b" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fbac408a47977ee4265f39e7659d33f1dfef5216/ffmpeg/opencv_videoio_ffmpeg.dll" "C:/openCV/3rdparty/ffmpeg" #missing "C:/openCV/3rdparty/ffmpeg/opencv_videoio_ffmpeg.dll" #check_md5 "H:/opencv-4.9.0/opencv-4.9.0/.cache/ffmpeg/9b755ecbbade0a5b78332e9b4ef2dd1b-opencv_videoio_ffmpeg.dll" #mismatch_md5 "H:/opencv-4.9.0/opencv-4.9.0/.cache/ffmpeg/9b755ecbbade0a5b78332e9b4ef2dd1b-opencv_videoio_ffmpeg.dll" "d41d8cd98f00b204e9800998ecf8427e" #delete "H:/opencv-4.9.0/opencv-4.9.0/.cache/ffmpeg/9b755ecbbade0a5b78332e9b4ef2dd1b-opencv_videoio_ffmpeg.dll" #cmake_download "H:/opencv-4.9.0/opencv-4.9.0/.cache/ffmpeg/9b755ecbbade0a5b78332e9b4ef2dd1b-opencv_videoio_ffmpeg.dll" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fbac408a47977ee4265f39e7659d33f1dfef5216/ffmpeg/opencv_videoio_ffmpeg.dll" #try 1 # timeout on name lookup is not supported # getaddrinfo(3) failed for raw.githubusercontent.com:443 # Could not resolve host: raw.githubusercontent.com # Closing connection 0 #
里面提示編譯時因網(wǎng)絡下載,缺失部分文件
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/fbac408a47977ee4265f39e7659d33f1dfef5216/ffmpeg/opencv_videoio_ffmpeg.dll" "C:/openCV/3rdparty/ffmpeg"
第一行帶有 raw 的網(wǎng)址則是我們需要下載的文件,將其復制并在瀏覽器中打開#missing
這一行表明了缺失文件應該存儲的地方,將下載的文件 復制粘貼到這即可
- 點擊generate
- build 目錄下,打開終端,執(zhí)行 mingw32-make,便開始編譯
- 編譯無錯后,在終端中輸入 mingw32-make.exe install 會打包編譯后的文件,執(zhí)行完成后, build 目錄下會有一個生成一個 install 目錄,包含了編譯好的 OpenCV
- 添加環(huán)境變量
將 install 目錄的 x64架構 的 mingw 版本下的 bin 和 lib 添加到環(huán)境變量中
Qt6 下使用 OpenCV
創(chuàng)建 CMake 構建的 Qt6 項目
添加如下語句
所跟的路徑如下,請根據(jù)自己電腦設定set(OpenCV_DIR "I:/opencv-4.9.0/build/install/x64/mingw/lib")
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PRIVATE ${OpenCV_LIBS})
{PROJECT_NAME} 是項目的名字
例如 project(untitled VERSION 0.1 LANGUAGES CXX)
這里的 {PROJECT_NAME} 就是 untitled
也可根據(jù) CMake Modules 添加的 opencv模塊下的 OpenCVConfig.cmke 對 主目錄的 CMakeLists.txt 更該
效果展示
文章來源:http://www.zghlxwxcb.cn/news/detail-820573.html
我的 主目錄 CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(untitled VERSION 0.1 LANGUAGES CXX)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_MODULE_PATH "I:/opencv-4.9.0/build/install/x64/mingw/bin")
set(OpenCV_DIR "I:/opencv-4.9.0/build/install/x64/mingw/lib")
set(CMAKE_PREFIX_PATH "D:/qt/qt6/6.4.3/mingw_64/lib/cmake")
include_directories(${OpenCV_INCLUDE_DIRS})
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(OpenCV REQUIRED)
set(PROJECT_SOURCES
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(untitled
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
# Define target properties for Android with Qt 6 as:
# set_property(TARGET untitled APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
# ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
if(ANDROID)
add_library(untitled SHARED
${PROJECT_SOURCES}
)
# Define properties for Android with Qt 5 after find_package() calls as:
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
else()
add_executable(untitled
${PROJECT_SOURCES}
)
endif()
endif()
target_link_libraries(untitled PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
target_link_libraries(untitled PRIVATE ${OpenCV_LIBS})
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)
set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.untitled)
endif()
set_target_properties(untitled PROPERTIES
${BUNDLE_ID_OPTION}
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
)
include(GNUInstallDirs)
install(TARGETS untitled
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(untitled)
endif()
注意事項
使用MSVC編譯時可以選擇 BUILD_opencv_world 選項,但是使用 mingw64 編譯時,選擇 BUILD_opencv_world 總會失敗,因此在使用mingw64的時候取消該選項。文章來源地址http://www.zghlxwxcb.cn/news/detail-820573.html
參考
- https://juejin.cn/post/7171322133040070686
- https://www.cnblogs.com/Alliswell-WP/p/OpenCV_Qt_CMake.html
- https://www.weizhiyong.com/archives/1904
到了這里,關于使用 Qt6-mingw 編譯 OpenCV 源碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!