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


🌈个人主页: 鑫宝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库。具体步骤如下:
- 右键点击"计算机"或"此电脑",选择"属性"。
- 点击"高级系统设置"。
- 点击"环境变量"。
- 在"系统变量"中,找到"Path"变量,点击"编辑"。
- 点击"新建",输入OpenCV安装路径下的
\build\x64\vc15\bin
(具体路径根据您的安装版本而定)。 - 点击"确定"保存更改。
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在高级图像处理和计算机视觉应用中的使用。

相关文章:

【机器学习】OpenCV入门与基础知识
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 OpenCV入门与基础知识简介安装与环境配置WindowsLinuxmacOS 核心数据结构MatSca…...

JUC学习笔记(二)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 四、共享模型之内存4.1 Java 内存模型4.2 可见性退不出的循环解决方法可见性 vs 原子性模式之 Balking1.定义2.实现 4.3 有序性原理之指令级并行1. 名词2.鱼罐头的故…...

炫酷HTML蜘蛛侠登录页面
全篇使用HTML、CSS、JavaScript,建议有过基础的进行阅读。 一、预览图 二、HTML代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-w…...

算法里面的离散化
一、离散化(discretization)在算法和数据结构中指的是将连续的输入数据映射到离散的值或者范围,从而使得处理和计算变得更高效。通常用于处理大范围或者无限可能的输入,以便将其转化为有限的、可以有效处理的范围。 离散化的定义…...

Https AK--(ssl 安全感满满)
免责声明:本文仅做分享! 目录 https探测 openssl Openssl连接服务器获取基本信息 连接命令: 指定算法连接: 测试弱协议连接是否可以连接: 得到的内容包括: sslscan 在线查询证书 https AK type 中间人AK sslsplit 工具…...

ERROR: Failed building wheel for cython_bbox | pip install cython_bbox 失败【解决方案】
🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 win11 系统 pip3 install cython_bbox 失败报错如下解决方法:1 下载…...
逻辑与位运算的双面舞者:、、|、||深度解析
深入解析&、&&、|、||:逻辑与位运算的奥秘之旅 在编程的世界里,&、&&、|、||这四种运算符扮演着至关重要的角色。它们不仅仅是简单的符号,更是连接程序逻辑、实现复杂功能的桥梁。本文旨在深入探讨这四者的区别与联…...

中断门+陷阱门
中断门: 中断描述符在IDT表里面 kd> dq idtr 80b95400 83e48e000008bfc0 83e48e000008c150 80b95410 0000850000580000 83e4ee000008c5c0 80b95420 83e4ee000008c748 83e48e000008c8a8 80b95430 83e48e000008ca1c 83e48e000008d018 80b95440 000085000050…...

RTMP直播播放器的几种选择
如何选择RTMP播放器? 在选择RTMP播放器时,需要综合考虑多个因素,以确保选择的播放器能够满足实际需求并提供良好的用户体验。以下是一些选择RTMP播放器的建议: 1. 功能需求 低延迟:对于直播场景,低延迟是…...

初识爬虫1
学习路线:爬虫基础知识-requests模块-数据提取-selenium-反爬与反反爬-MongoDB数据库-scrapy-appium。 对应视频链接(百度网盘):正在整理中 爬虫基础知识: 1.爬虫的概念 总结:模拟浏览器,发送请求,获取…...

【趣学Python算法100例】兔子产子
问题描述 有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总对数为多少? 题目解析 兔子产子问题是一个有趣的古典数学问题,…...
HTTP 四、HttpClient的使用
一、简单介绍 1、简介 HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著…...
C语言:结构体变量
1. 结构体变量的引用方法 例如,若有数据定义: struct Student{char name[10];int age;struct Date birthday; }s1,s2,stu[10]; 则下面对结构体变量的引用都是正确的: s1.age20; scanf("%d",&s1.age); gets(stu[0].name); s…...
bibtex是什么
BibTeX 是一个用于处理和格式化参考文献的工具,常与 LaTeX 一起使用。它提供了一种方便的方式来管理和生成参考文献列表,特别适用于学术写作和科研论文中。以下是对 BibTeX 的详细介绍: 基本概念 BibTeX 是 LaTeX 的一个附加工具࿰…...

【大模型专栏—进阶篇】智能对话全总结
大模型专栏介绍 😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本文为大模型专栏子篇,大模型专栏将持续更新,主要讲解大模型从入门到实战打怪升级。如有兴趣,欢迎您的阅读。 Ǵ…...
MVC应用单元测试以及请求参数的验证
SpringMVC支持对Controller单元测试 RunWith(SpringJUnit4ClassRunner.class) ContextConfiguration(locations {"classpath:mvc-dispatcher-servlet.xml", }) WebAppConfiguration public class ControllerJUnitBase{Resourceprivate RequestMappingHandlerMappin…...

算法:TopK问题
题目 有10亿个数字,需要找出其中的前k大个数字。 为了方便讲解,这里令k为5。 思路分析(以找前k大个数字为例) 很容易想到,进行排序,然后取前k个数字即可。 但是,难点在于,10亿个数…...
.json文件的C#解析,基于Newtonsoft.Json插件
目录 1. 前言 2. 正文 2.1 问题 2.2 解决办法 2.2.1 思路 2.2.2 代码实现 2.2.3 测试结果 3. 备注 1. 前言 天气晚来秋,这几天天气变凉了,各位同学注意好多穿衣服。回归正题 由于需要,需要将json的配置里面的调理解析出来,做成接口,以便于开发。 2. 正文 2.1 …...

四、(JS)JS中常见的加载事件
一、文档加载监听 (1)抛出疑惑,什么是文档加载监听?为什么要有这个东西? 老样子,我们先讲一个场景,带着大家熟悉为什么会有文档加载监听,是来解决什么问题来着的。 我们先看下这段…...

[网络]https的概念及加密过程
文章目录 一. HTTPS二. https加密过程 一. HTTPS https本质上就是http的基础上增加了一个加密层, 抛开加密之后, 剩下的就是个http是一样的 s > SSL HTTPS HTTP SSL 这个过程, 涉及到密码学的几个核心概念 明文 要传输的真正意思是啥 2)密文 加密之后得到的数据 这个密文…...

传统的将自然语言转化为嵌入向量的核心机制是:,将离散的语言符号转化为连续的语义向量,其核心依赖“上下文决定语义”的假设和神经网络的特征提取能力。
传统的将自然语言转化为嵌入向量的核心机制是:,将离散的语言符号转化为连续的语义向量,其核心依赖“上下文决定语义”的假设和神经网络的特征提取能力。 传统的将自然语言转化为嵌入向量(Word Embedding)的核心机制是分布式语义假设(Distributional Semantics Hypothesis…...

vue+cesium示例:地形开挖(附源码下载)
基于cesium和vue绘制多边形实现地形开挖效果,适合学习Cesium与前端框架结合开发3D可视化项目。 demo源码运行环境以及配置 运行环境:依赖Node安装环境,demo本地Node版本:推荐v18。 运行工具:vscode或者其他工具。 配置方式&#x…...
[论文阅读] 人工智能 | 大语言模型计划生成的新范式:基于过程挖掘的技能学习
#论文阅读# 大语言模型计划生成的新范式:基于过程挖掘的技能学习 论文信息 Skill Learning Using Process Mining for Large Language Model Plan Generation Andrei Cosmin Redis, Mohammadreza Fani Sani, Bahram Zarrin, Andrea Burattin Cite as: arXiv:2410.…...
使用C/C++和OpenCV实现图像拼接
使用 C 和 OpenCV 实现图像拼接 本文将详细介绍如何利用 OpenCV 库,在 C 环境中实现图像拼接。图像拼接技术可以将多张具有重叠区域的图像合成为一张高分辨率的全景图。OpenCV 提供了一个功能强大的 Stitcher 类,它封装了从特征点检测、匹配到图像融合的…...

航道无人机巡检系统
随着长江干线、京杭运河等航道智慧化升级提速,传统人工巡检模式已难以满足高频次、大范围、高精度的航道管理需求。无人机凭借其灵活机动、多源感知、高效覆盖等优势,正成为航道巡检的“空中卫士”。本文将结合多地成功案例,从选型标准、技术…...
Linux中 SONAME 的作用
🧠 一、从 -lexample 到 SONAME ✅ 假设你有以下文件结构: /libexample.so → libexample.so.1 /libexample.so.1 → libexample.so.1.0.0 /libexample.so.1.0.0 # SONAME: libexample.so.1/libexample.so.2 → libexample.so.2.0.0 /libexample.so.2.0…...

【计算机网络】非阻塞IO——poll实现多路转接
🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:计算机网络 🌹往期回顾🌹:【计算机网络】非阻塞IO——select实现多路转接 🔖流水不争,争的是滔滔不息 一、…...

Maven相关问题:jna版本与ES冲突 + aop失效
文章目录 1、背景2、解决3、一点思考4、环境升级导致AOP失效5、okhttp Bean找不到6、总结 记录一些Maven依赖相关的思考 1、背景 做一个监控指标收集,用一下jna依赖: <dependency><groupId>net.java.dev.jna</groupId><artifact…...
原生js操作元素类名(classList,classList.add...)
1、classList classList属性是一个只读属性,返回元素的类名,作为一个DOMTokenList集合(用于在元素中添加,移除及切换css类) length:返回类列表中类的数量,该属性是只读的 <style> .lis { width: 200px; …...

COMSOL与MATLAB联合仿真人工智能的电学层析成像系统
关键词:MATLAB,电学层析成像,人工智能,图像重建,深度学习 一、引言 基于人工智能的电学层析成像系统是一种创新的检测技术,结合了电学层析成像技术与人工智能算法的优势。电学层析成像技术,简…...