上一篇我已经下载了一个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::filesystem
int 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安装成功。