【机器学习】OpenCV入门与基础知识

server/2024/9/23 0:13:04/

鑫宝Code

🌈个人主页: 鑫宝Code
🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础
💫个人格言: "如无必要,勿增实体"


文章目录

  • OpenCV入门与基础知识
    • 简介
    • 安装与环境配置
      • Windows
      • Linux
      • macOS
    • 核心数据结构
      • Mat
      • Scalar
      • Point
      • Rect
    • 基本图像操作
      • 读写图像
      • 显示图像
      • 几何变换
      • 颜色空间转换
    • 基本绘图操作
      • 绘制线条
      • 绘制矩形
      • 绘制圆形
      • 绘制文本
    • 核心函数
      • 滤波
      • 图像混合
      • 位操作
      • 其他函数
    • 总结

OpenCV入门与基础知识

简介

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它由Intel公司发起并参与管理。OpenCV提供了一系列用于图像处理和计算机视觉的算法和工具,支持多种编程语言,如C++、Python、Java等,并且可以运行在Windows、Linux、macOS等多种操作系统上。

OpenCV广泛应用于各个领域,包括人机交互、机器人、安防监控、医疗影像、汽车驾驶等。它提供了丰富的功能,涵盖图像处理、视频分析、目标检测与跟踪、3D视觉等多个方面。
在这里插入图片描述

安装与环境配置

Windows

在Windows系统上安装OpenCV,可以通过预编译好的安装包进行安装。您可以从OpenCV官网(https://opencv.org/releases/)下载适合您系统的安装包,然后按照提示一步步安装。

安装完成后,您需要配置环境变量,以便在代码中引用OpenCV库。具体步骤如下:

  1. 右键点击"计算机"或"此电脑",选择"属性"。
  2. 点击"高级系统设置"。
  3. 点击"环境变量"。
  4. 在"系统变量"中,找到"Path"变量,点击"编辑"。
  5. 点击"新建",输入OpenCV安装路径下的\build\x64\vc15\bin(具体路径根据您的安装版本而定)。
  6. 点击"确定"保存更改。

Linux

在Linux系统上安装OpenCV,可以通过包管理器进行安装。以Ubuntu为例,您可以在终端中执行以下命令:

sudo apt-get update
sudo apt-get install libopencv-dev

这将安装OpenCV及其依赖项。如果您需要特定版本的OpenCV,可以从源码编译安装。

macOS

在macOS系统上安装OpenCV,可以使用Homebrew包管理器。在终端中执行以下命令:

brew install opencv

这将安装最新版本的OpenCV。如果您需要特定版本,可以指定版本号,例如:

brew install opencv@4

核心数据结构

OpenCV提供了一些核心数据结构,用于存储和处理图像、视频和其他数据。以下是一些常用的数据结构:

Mat

Mat是OpenCV中最重要的数据结构,用于存储图像数据。它是一个二维或多维的密集数组,可以存储不同类型的数据,如CV_8UC1(8位无符号单通道)、CV_32FC3(32位浮点三通道)等。

// 创建一个3通道的512x512的8位无符号整型矩阵
cv::Mat image = cv::Mat::zeros(512, 512, CV_8UC3);

在这里插入图片描述

Scalar

Scalar是一个四元数据结构,通常用于表示颜色或像素值。它包含四个元素,分别对应蓝色、绿色、红色和Alpha通道。

// 创建一个蓝色的Scalar
cv::Scalar blue(255, 0, 0);

Point

Point是一个二维点的数据结构,用于表示图像或视频中的坐标。它包含两个元素,分别表示x和y坐标。

// 创建一个点(10, 20)
cv::Point pt(10, 20);

Rect

Rect是一个矩形的数据结构,用于表示图像或视频中的矩形区域。它包含四个元素,分别表示矩形的x、y坐标、宽度和高度。

// 创建一个矩形(10, 20, 100, 200)
cv::Rect rect(10, 20, 100, 200);

基本图像操作

在这里插入图片描述

读写图像

OpenCV提供了imread()imwrite()函数,用于读取和写入图像文件。

#include <opencv2/opencv.hpp>int main()
{// 读取图像cv::Mat image = cv::imread("image.jpg");// 显示图像cv::imshow("Image", image);cv::waitKey(0);// 写入图像cv::imwrite("output.png", image);return 0;
}

显示图像

OpenCV提供了imshow()函数,用于在窗口中显示图像。

#include <opencv2/opencv.hpp>int main()
{cv::Mat image = cv::imread("image.jpg");// 显示图像cv::imshow("Image", image);cv::waitKey(0);return 0;
}

几何变换

OpenCV提供了多种几何变换函数,如resize()rotate()warpAffine()等,用于调整图像的大小、旋转、平移等操作。

#include <opencv2/opencv.hpp>int main()
{cv::Mat image = cv::imread("image.jpg");// 调整图像大小cv::resize(image, image, cv::Size(800, 600));// 旋转图像cv::Point2f center(image.cols / 2.0, image.rows / 2.0);cv::Mat rotation_matrix = cv::getRotationMatrix2D(center, 45, 1.0);cv::warpAffine(image, image, rotation_matrix, image.size());cv::imshow("Image", image);cv::waitKey(0);return 0;
}

颜色空间转换

OpenCV支持多种颜色空间,如BGR、HSV、Gray等。您可以使用cvtColor()函数在不同颜色空间之间转换。

#include <opencv2/opencv.hpp>int main()
{cv::Mat image = cv::imread("image.jpg");// 转换为灰度图像cv::Mat gray;cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);cv::imshow("Gray", gray);cv::waitKey(0);return 0;
}

基本绘图操作

OpenCV提供了一些基本的绘图函数,用于在图像上绘制线条、矩形、圆形、文本等。

绘制线条

使用line()函数可以在图像上绘制线条。

#include <opencv2/opencv.hpp>int main()
{cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3);// 绘制线条cv::line(image, cv::Point(100, 100), cv::Point(400, 400), cv::Scalar(0, 0, 255), 3);cv::imshow("Image", image);cv::waitKey(0);return 0;
}

绘制矩形

使用rectangle()函数可以在图像上绘制矩形。

#include <opencv2/opencv.hpp>int main()
{cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3);// 绘制矩形cv::rectangle(image, cv::Point(100, 100), cv::Point(400, 400), cv::Scalar(0, 255, 0), 2);cv::imshow("Image", image);cv::waitKey(0);return 0;
}

绘制圆形

使用circle()函数可以在图像上绘制圆形。

#include <opencv2/opencv.hpp>int main()
{cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3);// 绘制圆形cv::circle(image, cv::Point(250, 250), 100, cv::Scalar(255, 0, 0), -1);cv::imshow("Image", image);cv::waitKey(0);return 0;
}

绘制文本

使用putText()函数可以在图像上绘制文本。

#include <opencv2/opencv.hpp>int main()
{cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3);// 绘制文本cv::putText(image, "Hello, OpenCV!", cv::Point(100, 100), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255), 2);cv::imshow("Image", image);cv::waitKey(0);return 0;
}

核心函数

OpenCV提供了许多核心函数,用于执行各种图像处理和计算机视觉任务。以下是一些常用的核心函数:

滤波

OpenCV提供了多种滤波函数,用于对图像进行平滑、锐化、边缘检测等操作。常用的滤波函数包括blur()GaussianBlur()medianBlur()Laplacian()Sobel()等。

#include <opencv2/opencv.hpp>int main()
{cv::Mat image = cv::imread("image.jpg");// 高斯滤波cv::Mat blurred;cv::GaussianBlur(image, blurred, cv::Size(5, 5), 0);cv::imshow("Blurred", blurred);cv::waitKey(0);return 0;
}

图像混合

OpenCV提供了addWeighted()函数,用于将两个图像进行线性混合。这在图像拼接、alpha混合等场景中非常有用。

#include <opencv2/opencv.hpp>int main()
{cv::Mat image1 = cv::imread("image1.jpg");cv::Mat image2 = cv::imread("image2.jpg");// 图像混合double alpha = 0.5;double beta = 1.0 - alpha;cv::Mat blended;cv::addWeighted(image1, alpha, image2, beta, 0.0, blended);cv::imshow("Blended", blended);cv::waitKey(0);return 0;
}

位操作

OpenCV提供了一些位操作函数,如bitwise_and()bitwise_or()bitwise_xor()bitwise_not()。这些函数可用于执行像素级别的操作,如图像遮罩、背景移除等。

#include <opencv2/opencv.hpp>int main()
{cv::Mat image = cv::imread("image.jpg");cv::Mat mask = cv::imread("mask.jpg", cv::IMREAD_GRAYSCALE);// 位操作cv::Mat masked;cv::bitwise_and(image, image, masked, mask);cv::imshow("Masked", masked);cv::waitKey(0);return 0;
}

其他函数

OpenCV还提供了许多其他有用的函数,如calcHist()用于计算直方图、findContours()用于查找轮廓、matchTemplate()用于模板匹配等。这些函数可以帮助您完成各种图像处理和计算机视觉任务。

总结

本文介绍了OpenCV的基本概念、安装配置、核心数据结构、基本图像操作、绘图操作和核心函数。通过学习这些基础知识,您将能够开始使用OpenCV进行图像处理和计算机视觉应用的开发。在后续的文章中,我们将深入探讨OpenCV在高级图像处理和计算机视觉应用中的使用。

End


http://www.ppmy.cn/server/120536.html

相关文章

【CS110L】Rust语言 Lecture3-4 笔记

文章目录 第三讲 所有权:移动与借用&例1例2例3 错误处理&#xff08;开头&#xff09;为什么空指针如此危险&#xff0c;我们能做什么以应对&#xff1f;— 引出Optionis_none()函数unwrap_or()函数常见用法 第四讲 代码实践:链表Box节点和链表的定义节点和链表的构造函数判…

C++——求3*3矩阵对角元素之和。

没注释的源代码 #include <iostream> using namespace std; int main() { int a[3][3],i,j,sum0; cout<<"请输入a组中的元素:"<<endl; for(i0;i<2;i) { for(j0;j<2;j) { cin>>a[i][j]…

微信小程序认证流程

官方描述&#xff1a; 微信接口服务&#xff1a;即微信服务器。 具体的流程如下&#xff1a; 1.前端调用wx.login()获取登录凭证code 2.前端请求后端进行认证&#xff0c;发送code 3.后端请求微信获取openid 4.后端生成认证成功凭证返回给前端。 说明 调用 wx.login() 获…

深入理解Python中的时间表示:Unix时间点、毫秒和微秒,以及time模块

本套课程在线学习视频 ​​https://pan.quark.cn/s/3a470a7bbe67​​ 时间处理是编程中一项重要的任务&#xff0c;尤其是在涉及到时间戳、日志记录和调度等场景时。Python提供了强大的时间处理功能&#xff0c;特别是通过​​time​​模块。本文将探讨Python中的时间表示&am…

【宠物小精灵之收服(待更新)】

题目 代码 #include <bits/stdc.h> using namespace std; int f[1010][510]; int main() {int n, m, k;cin >> n >> m >> k;int c 0;for(int i 1; i < k; i){int cost, hp;cin >> cost >> hp;for(int j n; j > cost; j--){for(i…

eureka.client.service-url.defaultZone的坑

错误的配置 eureka: client: service-url: default-zone: http://192.168.100.10:8080/eureka正确的配置 eureka: client: service-url: defaultZone: http://192.168.100.10:8080/eureka根据错误日志堆栈打断电调试 出现两个key&#xff0c;也就是defaultZone不支持snake-c…

KTH5762系列 低功耗、高精度 3D 霍尔角度传感器 电子手表旋钮应用

KTH5762系列 低功耗、高精度 3D 霍尔角度传感器 电子手表旋钮应用 KTH5762AQ3DNE 概述 KTH5762 是一款集成了高度匹配霍尔元件的3D (XY、 XZ 、 YZ 平面 ) 霍尔角度传感器&#xff0c;集成低功 耗&#xff0c;低噪声&#xff0c;高精度零漂运放&#xff0c;高性能&#xff…

SVM原理

SVM 这里由于过了很长时间 博主当时因为兴趣了解了下 博主现在把以前的知识放到博客上 作为以前的学习的一个结束 这些东西来自其他资料上 小伙伴看不懂英文的自行去翻译下吧 博主就偷个懒了 多维空间和低维空间 不一样的分法&#xff0c;将数据映射到高维 &…