C++视觉之OpenCV快速上手

简介

OpenCV(Open Source Computer Vision Library) 是一个开源的计算机视觉库 ,它提供了丰富的图像处理和计算机视觉功能,可以适用于特征检测、物体识别、机器学习等领域。OpenCV 的核心功能库由 C++ 实现,同时,OpenCV 还提供了多种编程语言的接口,包括 Java、Python、Matlab 等,使得开发者能够在不同平台上轻松使用其强大的功能,Gopher也提供了基于OpenCV开发的接口库

官方文档:docs.opencv.org/4.9.0/index...

Github 仓库:github.com/opencv/open...

Go OpenCV Github 仓库:github.com/hybridgroup...

安装

  1. Ubuntu 安装 OpenCV C++
shell 复制代码
sudo apt-get update
sudo apt-get install libopencv-dev
  1. MacOS 安装 OpenCV C++
shell 复制代码
brew install opencv
  1. Windows 安装 OpenCV C++

下载资源包,双击运行资源包,输入或选择提取的位置。

配置

配置的流程主要分为以下几步:

  1. 使用 CMake(cmake-gui) 配置编译的源文件以及输出的路径,截图的第三步记得选择 MinGW MakeFiles ,截图部分的内容操作完成后,进入以上选中的编译后的输出路径中,使用 mingw32-make 命令编译(这一步会比较耗时),然后使用 mingw32-make install 将编译好的文件整合到 install 目录下。
  1. 创建C++项目,编辑 CMakeLists.txt 文件,将以下文件中的 OpenCV_DIR 指定为上面编译后输出的包的 install 目录下(PS:CMakeLists文件修改后要重新 Reload)。
txt 复制代码
cmake_minimum_required(VERSION 3.26)
project(opencv_test)
set(CMAKE_CXX_STANDARD 17)
add_executable(opencv_test main.cpp)

# 设置OpenCV库的安装目录 (修改)
set(OpenCV_DIR D:/software/opencv/mingw-build/install)
find_package(OpenCV REQUIRED)
# 头文件目录
include_directories(${OpenCV_INCLUDE_DIRS})
# 链接库
target_link_libraries(opencv_test ${OpenCV_LIBS})
  1. 创建一个查看图片的简单案例,能够正常运行说明我们的基础环境配置完成了。
cpp 复制代码
#include <opencv2/opencv.hpp>

int main() {
    // 读取图像
    cv::Mat img = cv::imread("../image/test.png");
    if (img.empty()) {
        std::cerr << "Failed to load image." << std::endl;
        return -1;
    }

    // 显示图像
    cv::imshow("Image", img);
    cv::waitKey(0);

    return 0;
}
  1. 使用命令构建与编译(Windows)
shell 复制代码
# 构建  
cmake -G "MinGW Makefiles" ..  
# 编译  
mingw32-make

示例

  1. 图像灰度化
cpp 复制代码
#include <opencv2/opencv.hpp>

int main() {
    cv::Mat colorImg = cv::imread("../image/test.jpg");
    if (colorImg.empty()) {
        std::cerr << "Failed to load image." << std::endl;
        return;
    }
    cv::Mat grayImg;
    cv::cvtColor(colorImg, grayImg, cv::COLOR_BGR2GRAY);

    cv::imshow("Gray Image", grayImg);
    cv::waitKey(0);
}

return 0;
  1. 图像边缘检测
cpp 复制代码
#include <opencv2/opencv.hpp>

int main() {
    // 读取图像
    cv::Mat image = cv::imread("../image/test.jpg", cv::IMREAD_GRAYSCALE);
    if (image.empty()) {
        std::cerr << "Failed to load image." << std::endl;
        return -1;
    }

    // 使用Canny边缘检测算法
    cv::Mat edges;
    cv::Canny(image, edges, 50, 150);

    // 显示原图和边缘图
    cv::imshow("Original Image", image);
    cv::imshow("Edges", edges);
    cv::waitKey(0);
    return 0;
}
相关推荐
sulikey20 分钟前
C++的STL:深入理解 C++ 的 std::initializer_list
开发语言·c++·stl·list·initializerlist·c++标准库
代大大28 分钟前
sciter.js 之cpp使用教程(1)
c++·前端框架
仰泳的熊猫29 分钟前
LeetCode:207. 课程表
数据结构·c++·算法·leetcode
liu****36 分钟前
19.map和set的封装
开发语言·数据结构·c++·算法
孤廖36 分钟前
C++ 模板再升级:非类型参数、特化技巧(含全特化与偏特化)、分离编译破解
linux·服务器·开发语言·c++·人工智能·后端·深度学习
田野追逐星光1 小时前
STL中容器string -- 讲解超详细
c++
艾莉丝努力练剑2 小时前
【C++模版进阶】如何理解非类型模版参数、特化与分离编译?
linux·开发语言·数据结构·c++·stl
草莓熊Lotso2 小时前
基于容器适配器模式的 Stack 与 Queue 实现:复用底层容器的优雅设计
c++·网络协议·rpc·适配器模式
立志成为大牛的小牛2 小时前
数据结构——二十五、邻接矩阵(王道408)
开发语言·数据结构·c++·学习·程序人生
qq_479875436 小时前
C++ std::Set<std::pair>
开发语言·c++