上一篇我已經下載了一個ubuntu:20.04的鏡像;
1. 查看所有鏡像
sudo docker images
2. 基于本地存在的ubuntu:20.04鏡像創建一個容器,容器的名為cppubuntu-1。創建的時候就會啟動容器。
sudo docker run -itd --name cppubuntu-1 ubuntu:20.04
結果出現長串的容器ID號,說明創建容器cppubuntu-1成功
3.? 查看docker中有哪些容器
sudo docker ps -a
4. 停止運行容器。
sudo docker stop 2ffec3839753
5. 啟動容器
sudo docker start 2ffec3839753
6. 通過容器ID號刪除容器(注意只有停止運行的容器才能刪除)
sudo docker rm 容器的ID號
7. 通過容器ID號進入容器內部
sudo docker exec -it 2ffec3839753 /bin/bash
8. 查看容器當前大小
sudo docker ps -s
9. 將宿主機上的文件拷貝到容器內部
sudo docker cp /home/lmz/workspace/opencv4_10_0_tools/opencv-4.10.0.zip 2ffec3839753:/home/lmz/tools
sudo docker cp ./cmake-3.31.6.tar.gz 2ffec3839753:/home/lmz/tools
----------------------------------------------------------------------------------------------------------------------
搭建c++開發環境
9. 安裝gcc/g++
apt-get install build-essential
9.1 查看編譯器版本
gcc --version
g++ --version
make --version
10 指定版本安裝CMake
10.1 安裝ssl庫
sudo apt-get install libssl-dev
10.2 解壓安裝包
tar -zxvf cmake-3.31.6.tar.gz && cd cmake-3.31.6
10.3 查看配置文件
./bootstrap --help
10.4 配置(將cmake安裝到指定的位置)
./bootstrap --prefix=/usr/local/cmake
10.5 編譯cmake源文件(指定8個線程編譯源文件)
make -j8
10.6 安裝cmake
make install
10.7 將cmake的安裝路徑添加環境變量
打開 【vim /etc/profile】文件,在文件末尾輸入一下內容:
# cmake env path
export PATH=/usr/local/cmake/bin:$PATH
10.8 刷新環境變量
source /etc/profile
10.9 驗證是否安裝成功
切換到任意目錄下執行如下命令,驗證安裝是否成功
cmake --version
安裝成功的樣子:
10.10 刪除cmake的源碼目錄和源碼壓縮包(不影響已經安裝好的cmake)?,免得占總docker容器空間。
rm -fr ./cmake-3.31.6
rm -rf ./cmake-3.31.6.tar.gz
?注意,如果你和我一樣,虛擬機上的宿主機是ubuntu20.04。
在宿主機上安裝docker。docker容器cppubuntu-1以ubuntu:20.04鏡像文件創建的,并且在容器內部搭建開發環境,那么你關機虛擬機之后,容器會停止。cmake環境會找不到。
再次開機進入到容器后,需要重新刷新環境變量
source /etc/profile
可以不指定cmake的安裝目錄,會不需要這一步吧
**********************************************************************************************************
安裝opencv--c++開發環境
1. 下載源碼包
wget https://github.com/opencv/opencv/archive/refs/tags/4.10.0.zip
2. 解壓并且進入到解壓后的文件夾中
unzip opencv-4.10.0.zip
cd opencv-4.10.0
3. 構建cmake項目(注意這個地方安裝目錄被我寫成opencv4_9,我opencv的源碼是4.10。只是安裝路徑被我寫為opencv4_9。不影響的)
cmake -B build -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr/local/opencv4_9
-B | 指定一個構建目錄。-B build表示會在當前文件夾下創建一個build文件夾,待會兒構建后的文件全部放入其中。 |
-G | 指定生成器。-G "Unix Makefiles"表示生成一個適合于Unix下使用的Makefile
-G "Visual Studio 16 2019"表示 為 Windows 平臺上的 Visual Studio IDE 生成解決方案文件(.sln) |
-D | 設置一個 CMake 變量。-DCMAKE_INSTALL_PREFIX=/usr/local/opencv4_9? ? 表示變量名為:CMAKE_INSTALL_PREFIX,變量的值為:/usr/local/opencv4_9 |
執行完上述命令后,會在opencv的源碼目錄下創建一個build目錄,并且在build目錄下生成一堆文件。注意上述操作并不會創建? /usr/local/opencv4_9?這個目錄。
?
4. 編譯源碼
cmake --build build/
5. 安裝
cmake --install build/
執行這個命令,將編譯好的庫和頭文件以及cmake文件復制到之前指定的CMAKE_INSTALL_PREFIX里,如下圖所示:
6 測試安裝成功沒有
記住自己的安裝目錄;/usr/local/opencv4_9
切換到安裝目錄下的該文件夾? ? /usr/local/opencv4_9/lib/cmake/opencv4 查看是否有xxx.cmake
編寫一個CMakeLists.txt腳本測試
cmake_minimum_required(VERSION 3.0)project(Demo)# 指定opencv的xxxx.cmake文件目錄,執行cmake文件中記錄著opencv的頭文件目錄位置,庫目錄所在位置。
set(OpenCV_DIR "/usr/local/opencv4_9/lib/cmake/opencv4")# 指定版本查找opencv
find_package(OpenCV 4.10 REQUIRED)# 打印查找到的內容
message(STATUS "Found OpenCV version: ${OpenCV_VERSION}")
message(STATUS "OpenCV libraries to link: ${OpenCV_LIBS}")
message(STATUS "OpenCV include directories: ${OpenCV_INCLUDE_DIRS}")
?執行命令
cmake -S . -B build
安裝成功,可以創建opencv項目了。
----------------------------------------------再次安裝成功確定-------------------------------------------------------
?7. 拷貝一張圖像進入到容器
sudo docker cp ./bus.jpg 2ffec3839753:/home/lmz/workspace/test
編寫CMakeLists.txt
cmake_minimum_required(VERSION 3.0)project(Demo)set(OpenCV_DIR "/usr/local/opencv4_9/lib/cmake/opencv4") # 對應上面剛查的目錄find_package(OpenCV 4.10 REQUIRED)
message(STATUS "22222 Found OpenCV version: ${OpenCV_VERSION}")
message(STATUS "33333 OpenCV libraries to link: ${OpenCV_LIBS}")
message(STATUS "44444 OpenCV include directories: ${OpenCV_INCLUDE_DIRS}")add_executable(${PROJECT_NAME} main.cpp)target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
編寫main.cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include <filesystem> // C++17 才支持 std::filesystemint main() {// 圖像路徑std::string imagePath = "/home/lmz/workspace/test/bus.jpg";// 讀取圖像cv::Mat img = cv::imread(imagePath);if (img.empty()) {std::cerr << "無法讀取圖像!路徑:" << imagePath << std::endl;return -1;}// 轉換為灰度圖cv::Mat grayImg;cv::cvtColor(img, grayImg, cv::COLOR_BGR2GRAY);// 獲取文件所在目錄std::string outputImagePath = "/home/lmz/workspace/test/bus_test.jpg";// 保存灰度圖bool success = cv::imwrite(outputImagePath, grayImg);if (success) {std::cout << "灰度圖像已保存至: " << outputImagePath << std::endl;} else {std::cerr << "保存圖像失敗!" << std::endl;return -1;}return 0;
}
執行命令:?
cmake -S . -B build && cmake --build build && cd build && make && cd - && ./build/Demo
查看結果:
OK安裝成功。?