OpenCV的基本用法全解析

 

《小白入门:OpenCV的基本用法全解析》

嗨,朋友们!之前咱们知道了OpenCV在机器视觉里就像个超级厉害的瑞士军刀,那今天咱们就来好好唠唠,**OpenCV到底该怎么用呢?**这就像是拿到了一把好剑,咱们得知道怎么耍起来才行。

一、安装OpenCV

在开始使用OpenCV之前,咱们得先把它安装好。这就像是你要做饭,得先有锅碗瓢盆一样。如果你是用pip来管理Python包的话,那安装就很简单啦,只需要在命令行里输入:

pip install opencv - python

等安装完成,你就已经迈出了使用OpenCV的第一步啦。

二、读取和显示图像

(一)读取图像

这是OpenCV最基本的操作之一,就像你打开相册看照片一样。你可以用cv2.imread()函数来读取图像文件。比如说:

import cv2# 读取图像文件,这里假设图像文件名为test.jpg,在当前工作目录下
img = cv2.imread('test.jpg')

这里的img就是一个包含了图像数据的对象啦。

(二)显示图像

读取了图像之后,咱们得看看它吧。这时候就用到了cv2.imshow()函数。不过要注意哦,这个函数显示图像的时候,需要一个窗口名字作为第一个参数,图像对象作为第二个参数。而且,为了让窗口一直显示着,我们还得加上cv2.waitKey(0),这就像是告诉程序在这里等一下,等用户按下任意键再继续。最后,看完图像后要用cv2.destroyAllWindows()来关闭所有打开的窗口。完整的代码就像这样:

import cv2img = cv2.imread('test.jpg')
cv2.imshow('My Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、图像的基本处理

(一)调整图像大小

有时候图像太大了或者太小了,我们想调整一下它的大小。这时候就可以用cv2.resize()函数啦。比如说,你想把图像的宽度调整为原来的一半,高度按照原来的比例自动调整,可以这样做:

import cv2img = cv2.imread('test.jpg')
height, width = img.shape[:2]
new_width = int(width / 2)
# 这里使用cv2.INTER_AREA插值方法,适合缩小图像
resized_img = cv2.resize(img, (new_width, height), interpolation = cv2.INTER_AREA)
cv2.imshow('Resized Image', resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

(二)转换图像颜色空间

图像有不同的颜色空间,像常见的BGR(OpenCV默认的颜色空间)、灰度图等。如果你想把彩色图像转换为灰度图,就可以用cv2.cvtColor()函数。这在很多图像处理任务里很有用,比如边缘检测的时候,灰度图处理起来更方便。

import cv2img = cv2.imread('test.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray Image', gray_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、图像的滤波操作

(一)高斯滤波

高斯滤波就像是给图像做了一个平滑的处理,可以让图像变得更加细腻,去除那些小噪点。用cv2.GaussianBlur()函数就可以实现啦。

import cv2img = cv2.imread('test.jpg')
# 这里的(5, 5)是高斯核的大小,0表示根据核的大小自动计算标准差
blurred_img = cv2.GaussianBlur(img, (5, 5), 0)
cv2.imshow('Blurred Image', blurred_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

(二)中值滤波

中值滤波对于去除椒盐噪声特别有效。它是用像素邻域内的中值来代替中心像素的值。可以用cv2.medianBlur()函数来实现。

import cv2img = cv2.imread('test.jpg')
# 这里的5表示滤波器的大小
median_blurred_img = cv2.medianBlur(img, 5)
cv2.imshow('Median Blurred Image', median_blurred_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

五、边缘检测

边缘检测就像是给图像做了一个轮廓勾勒,找出图像里物体的边缘。OpenCV里有好几种边缘检测的方法,其中最著名的是Canny边缘检测,用cv2.Canny()函数。

import cv2img = cv2.imread('test.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 这里的100和200是Canny算法的两个阈值
edges = cv2.Canny(gray_img, 100, 200)
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

六、绘制形状和文字

(一)绘制形状

在图像上绘制形状也是很常见的操作,比如画个矩形、圆形之类的。以画矩形为例,可以用cv2.rectangle()函数。

import cv2img = cv2.imread('test.jpg')
# 这里的(10, 10)是矩形左上角的坐标,(100, 100)是矩形右下角的坐标,(0, 255, 0)是矩形的颜色(BGR格式),2是线条的粗细
cv2.rectangle(img, (10, 10), (100, 100), (0, 255, 0), 2)
cv2.imshow('Image with Rectangle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

(二)绘制文字

如果想在图像上添加文字,可以用cv2.putText()函数。

import cv2img = cv2.imread('test.jpg')
font = cv2.FONT_HERSHEY_SIMPLEX
# 这里的'Hello World'是要写的文字,(10, 500)是文字的起始坐标,1是字体大小,(255, 255, 255)是文字的颜色(白色),2是线条粗细
cv2.putText(img, 'Hello World', (10, 500), font, 1, (255, 255, 255), 2)
cv2.imshow('Image with Text', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

七、总结

好啦,朋友们,上面这些就是OpenCV的一些基本用法啦。从读取和显示图像,到图像的基本处理、滤波、边缘检测,再到绘制形状和文字,这些都是构建更复杂机器视觉应用的基础。就像盖房子,先把砖头、水泥这些基础材料准备好,才能盖起高楼大厦。

小伙伴们,你们有没有试着用OpenCV做一些小的图像处理项目呢?或者在使用过程中遇到了什么问题呢?欢迎在评论区留言讨论哦。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汇川EASY系列之以太网通讯(MODBUS_TCP做从站)

汇川easy系列PLC做MODBUS_TCP从站,不需要任何操作,但是有一些需要知道的东西。具体如下: 1、汇川easy系列PLC做MODBUS_TCP从站,,ModbusTCP服务器默认开启,无需设置通信协议(即不需要配置),端口号为“502”。ModbusTCP从站最多支持31个ModbusTCP客户端(ModbusTCP主站…

在 Offset Explorer 中配置多节点 Kafka 集群的详细指南

一、是否需要配置 Zookeeper? Kafka 集群的 Zookeeper 依赖性与版本及运行模式相关: Kafka 版本是否需要 Zookeeper说明0.11.x 及更早版本✅ 必须配置Kafka 完全依赖 Zookeeper 管理元数据2.8 及以下版本✅ 必须配置Kafka 依赖外置或内置的 Zookeeper …

前端-选中pdf中的文字并使用,显示一个悬浮的翻译按钮(本地pdfjs+iframe)不适用textlayer

使用pdfjs移步– vue2使用pdfjs-dist实现pdf预览(iframe形式,不修改pdfjs原来的ui和控件,dom层可以用display去掉一部分组件) 方案1:获取选择文本内容的最前面的字符坐标的位置(这种写法会导致如果选择超出…

生活电子常识-deepseek-r1本地化部署+ui界面搭建

前言 deepseek-r1 14b模型,32b模型部署在本地电脑上也能实现非常好的性能。 因此有兴趣研究了下如何在本地部署。 同时最新流行mauns工作流,他们提供一句话实现网页端任意应用的能力。实际上,你也可以用本地的模型来实现离线的ai工作流功能。…

mac丝滑安装Windows操作系统【丝滑简单免费】

mac丝滑安装Windows操作系统【丝滑&简单&免费】 记录mac丝滑安装windows系统1、安装免费版 VMware fusion 132、安装Windows镜像文件3、跳过联网安装(完成1后将2拖入1 点点点 即可来到3的环节)4、 安装vmware 工具【非常重要,涉及联网…

基于Spring Boot的企业内管信息化系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

Pytorch实现之对称卷积神经网络结构实现超分辨率

简介 简介:针对传统的超分辨率重建技术所重建的图像过于光滑且缺乏细节的问题,作者提出了一种改进的生成对抗图像超分辨率网络。 该改进方法基于深度神经网络,其生成模型包含多层卷积模块和多层反卷积模块,其中在感知损失基础上增加了跳层连接和损失函数。 该判别模型由多…

Scikit-learn模型构建全流程解析:从数据预处理到超参数调优

模型选择与训练步骤及示例 1. 数据准备与探索 步骤说明:加载数据并初步探索其分布、缺失值、异常值等。 注意事项: 检查数据类型(数值/类别)、缺失值和异常值。对类别型特征进行编码(如独热编码)。 实例&…

001-JMeter的安装与配置

1.前期准备 下载好JMeter : https://jmeter.apache.org/download_jmeter.cgi 下载好JDK : :Java Downloads | Oracle 中国 下载图中圈蓝的JMeter和JDK就行,让它边下载,我们边往下看 2.为什么要下载并安装JDK ? JMeter 是基于 Java 开发的工具&#…

第2.2节 Android Jacoco插件覆盖率采集

JaCoCo(Java Code Coverage)是一款开源的代码覆盖率分析工具,适用于Java和Android项目。它通过插桩技术统计测试过程中代码的执行情况,生成可视化报告,帮助开发者评估测试用例的有效性。在github上开源的项目&#xff…

特征工程自动化(FeatureTools实战)

目录 特征工程自动化(FeatureTools实战)1. 引言2. 项目背景与意义2.1 特征工程的重要性2.2 自动化特征工程的优势2.3 工业级数据处理需求3. 数据集生成与介绍3.1 数据集构成3.2 数据生成方法4. 自动化特征工程理论基础4.1 特征工程的基本概念4.2 FeatureTools库简介4.3 关键公…

Scikit-learn模型评估全流程解析:从数据划分到交叉验证优化

模型评估的步骤、scikit-learn函数及实例说明 1. 数据划分(Train-Test Split) 函数:train_test_split使用场景:将数据分为训练集和测试集,避免模型过拟合。作用:确保模型在未见过的数据上验证性能。示例&…

Spring AI相关的面试题

以下是150道Spring AI相关的面试题目及答案: ### Spring AI基础概念类 **1. 什么是Spring AI?** Spring AI是Spring框架的扩展,旨在简化人工智能模型在Java应用中的集成与使用,提供与Spring生态无缝衔接的工具和抽象&#xff0c…

C++ 学习笔记(四)—— 类和对象

1、this指针 class Date { public:void Init(Date* this, int year, int month, int day){this->_year year;this->_month month;this->_day day;this->Print();// 这就是this指针,是编译器自己加的,是用来让成员函数找到成…

SpringMVC全局异常处理机制

异常处理机制 异常处理的两种方式: 编程式异常处理:是指在代码中显式地编写处理异常的逻辑。它通常涉及到对异常类型的检测及其处理,例如使用 try-catch 块来捕获异常,然后在 catch 块中编写特定的处理代码,或者在 f…

深入LangChain:LLM交互机制与RAG集成的技术

本文将聚焦于 LangChain 如何集成检索增强生成(RAG),了解其架构、主要组件,以及与 LLM 的交互 LangChain 架构概览 1、基础层 这是与各类 LLM 对接的 “桥梁”。LangChain 支持多种流行的 LLM,如 OpenAI 的系列模型、H…

本地部署 LangManus

本地部署 LangManus 0. 引言1. 部署 LangManus2. 部署 LangManus Web UI 0. 引言 LangManus 是一个社区驱动的 AI 自动化框架,它建立在开源社区的卓越工作基础之上。我们的目标是将语言模型与专业工具(如网络搜索、爬虫和 Python 代码执行)相…

SQL注入(SQL Injection)攻击原理与防御措施

SQL是一种代码注入技术,可使攻击者修改应用程序向数据库提供的查询。 迄今为止,最常见和最严重的应用 程序安全威胁总是隐藏在与数据库有某些连接的网络应用 程序中。 通过这种 SQL 注入,攻击者可以绕过登录程序,获取、更改甚至更…

【算法】十大排序算法(含时间复杂度、核心思想)

以下是 **十大经典排序算法** 的时间复杂度、空间复杂度及稳定性总结,适用于面试快速回顾:排序算法对比表 排序算法最佳时间复杂度平均时间复杂度最差时间复杂度空间复杂度稳定性核心思想冒泡排序O(n)O(n)O(n)O(1)稳定相邻元素交换,大数沉底…

LVS的 NAT 模式实现 3 台RS的轮询访问

使用LVS的 NAT 模式实现 3 台RS的轮询访问 1.配置 RS(NAT模式)2. 配置 LVS 主机(仅主机、NAT模式)2.1 配置仅主机网卡(192.168.66.150/24 VIP )2.2 配置 NAT 网卡(192.168.88.6/24 DIP&#xff…