《Opencv》基础操作<1>

目录

一、Opencv简介

主要特点:

应用领域:

二、基础操作

1、模块导入

2、图片的读取和显示

(1)、读取

(2)、显示

3、 图片的保存

4、获取图像的基本属性

5、图像转灰度图

6、图像的截取

7、图像的缩放

8、图像的旋转

9、膨胀和腐蚀操作

(1)、膨胀操作

(2)、腐蚀操作

 10、图像的轮廓检测

(1)、Sobel 算子轮廓检测法

(2)、findContours 边缘检测算法

(3)、Canny轮廓检测


一、Opencv简介

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它由一系列C++函数和少量C函数构成,同时也提供了Python、Java、MATLAB等语言的接口。OpenCV的设计目标是提供一个简单易用的计算机视觉框架,以便开发者能够快速实现各种视觉处理任务。

主要特点:

  1. 跨平台支持:OpenCV可以在Windows、Linux、macOS、Android和iOS等多个操作系统上运行。

  2. 丰富的图像处理功能:包括图像的读取、显示、保存、滤波、边缘检测、形态学操作、特征检测与描述、图像分割等。

  3. 视频处理:支持视频的读取、显示、保存,以及视频流的实时处理。

  4. 机器学习:内置了多种机器学习算法,如支持向量机(SVM)、K近邻(KNN)、决策树等,可以用于分类、回归等任务。

  5. 深度学习支持:OpenCV 3.3版本之后,集成了深度学习模块,支持TensorFlow、Caffe、Torch等主流深度学习框架的模型导入和推理。

  6. 高性能:OpenCV的许多算法都经过了优化,能够高效地处理大规模图像和视频数据。

  7. 开源社区支持:OpenCV拥有庞大的用户和开发者社区,提供了丰富的文档、教程和示例代码,方便用户学习和使用。

应用领域:

OpenCV广泛应用于各种计算机视觉和图像处理任务,包括但不限于:

  • 图像处理:如图像增强、滤波、边缘检测等。

  • 视频分析:如目标跟踪、运动检测、行为识别等。

  • 机器视觉:如工业检测、机器人视觉、自动驾驶等。

  • 医学图像处理:如CT、MRI图像的分析与处理。

  • 增强现实:如虚拟物体叠加、实时特效等。

二、基础操作

1、模块导入

import cv2

2、图片的读取和显示

(1)、读取
  • 读取原图
image = cv2.imread('图片名或路径')
  • 读取灰度图

在路径后面加上0,代表以灰度图的形式读取图片

image = cv2.imread('图片名或路径',0)
(2)、显示
import cv2

# 显示图像
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.waitKey() 函数 :用于等待用户的按键事件,它的参数表示等待按键的时间(单位是毫秒)。当参数设置为 0 时,意味着程序会一直处于等待状态,直到用户按下任意一个按键为止; 

cv2.destroyAllWindows ( )函数 :作用是关闭所有由 OpenCV 创建的图像显示窗口。

3、 图片的保存

import cv2

# 保存图像
cv2.imwrite('output_image.jpg', image)

4、获取图像的基本属性

获取图像的BGR、像素点个数、数据类型。

# 获取图像的宽度和高度
height, width, channels = image.shape

# 获取图像的尺寸
size = image.size

# 获取图像的数据类型
dtype = image.dtype

5、图像转灰度图

假设一张已经读取的非灰度图想转为灰度图,可用此方法

import cv2

gray_img = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

6、图像的截取

注:前面的参数截取的是高,后面的是宽。opencv中的图像坐标原点在图像的左上角。

img_cut = image[0:50,0:50]
# 前面的参数截取的是高,后面的是宽。

7、图像的缩放

import cv2
# 缩放图像
resized_image = cv2.resize(image, (new_width, new_height))

8、图像的旋转

import cv2

# 获取图像的中心点
(h, w) = image.shape[:2]
center = (w // 2, h // 2)

# 旋转图像
M = cv2.getRotationMatrix2D(center, angle, scale)
rotated_image = cv2.warpAffine(image, M, (w, h))

center:图像的中心点;

angle:旋转的角度,正数为逆时针旋转,负数为顺时针旋转;

scale:图像旋转后的缩放比例;

M:为一个2*3的变换矩阵,会被后续的 cv2.warpAffine 函数用来对图像实际执行旋转(以及缩放,如果有设置缩放比例的话)操作;

(w,h):经过旋转等变换后输出的图像 大小;

9、膨胀和腐蚀操作

(1)、膨胀操作
import cv2
import numpy as np

kernel = np.ones(3,3)

# 膨胀操作
dilated_image = cv2.dilate(image, kernel, iterations=1)
(2)、腐蚀操作
import cv2
import numpy as np

kernel = np.ones(3,3)

# 腐蚀操作
eroded_image = cv2.erode(image, kernel, iterations=1)

 iterations参数:用于指定腐蚀操作执行的次数

 10、图像的轮廓检测

注意:轮廓检测最好使用灰度图或者二值化的图,这样检测会更精准。

(1)、Sobel 算子轮廓检测法
import cv2

# 水平方向检测
sobelx = cv2.Sobel(image,cv2.CV_64F,1,0,ksize=3)
# 对结果取绝对值,以免负数被截取为0
sobelx = cv2.convertScaleAbs(sobelx)

# 垂直方向检测
sobely = cv2.Sobel(image,cv2.CV_64F,0,1,ksize=3)
# 对结果取绝对值,以免负数被截取为0
sobely = cv2.convertScaleAbs(sobely)

# 垂直水平方向根据权重进行相加
sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)


cv2.imshow('',sobelxy)

此种方法最好水平检测与垂直检测分开,然后再求和。如果同时检测效果会不好。 

(2)、findContours 边缘检测算法

使用cv2.findContours()算法时图片必须是灰度图或者经过二值化处理过的图

import cv2

# 查找轮廓
contours, hierarchy = cv2.findContours(image_gray, type1, type2)

# 绘制轮廓
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)

contours:包含了所有检测到的轮廓信息的列表;

hierarchy:它表示轮廓之间的层次关系信息;

image:表示待检测的图片;

type1(轮廓检测形式)有如下选项:

cv2.RETR_TREE:表示会检索所有的轮廓,并重构嵌套轮廓的完整层次结构;

cv2.RETR_EXTERNAL:只检索最外层的轮廓,忽略所有内部的子轮廓;

cv2.RETR_LIST:检索所有轮廓,但不建立轮廓间的层次关系;

type2(轮廓逼近的方法)有如下选项:

cv2.CHAIN_APPROX_SIMPLE:会压缩水平、垂直和对角方向的线段,仅保留轮廓的端点信息,将轮廓用尽可能少的点来表示,以达到简化轮廓数据的目的;

cv2.CHAIN_APPROX_NONE:存储轮廓的所有边界点,也就是完整地记录轮廓经过的每一个像素点,不进行任何简化,这样得到的轮廓数据会比较详细、准确,但数据量通常很大。

(3)、Canny轮廓检测
import cv2
result_img = cv2.Canny(gray_img,50,150,apertureSize=3,L2gradient=True)
cv2.imshow('result_img',result_img)

50,150:低阈值和高阈值;

apertureSize:Sobel算子核的大小,一般为奇数3,5,7等;

L2gradient:为True时使用采用更为精确的 L2 范数,为False时采用近似的 L1 范数。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读:A Software Platform for Manipulating theCamera Imaging Pipeline

论文代码开源链接: A Software Platform for Manipulating the Camera Imaging Pipelinehttps://karaimer.github.io/camera-pipeline/摘要:论文提出了一个Pipline软件平台,可以方便地访问相机成像Pipline的每个阶段。该软件允许修改单个模块…

ChatGPT的应用场景:开启无限可能的大门

ChatGPT的应用场景:开启无限可能的大门 随着人工智能技术的快速发展,自然语言处理领域迎来了前所未有的突破。其中,ChatGPT作为一款基于Transformer架构的语言模型,凭借其强大的语言理解和生成能力,在多个行业和场景中展现出了广泛的应用潜力。以下是ChatGPT八个最具代表…

音视频-什么是帧,视频为什么要编码

帧就是动画中的一张图片,这相当于电影胶片上的一个镜头,一帧就是一幅静止的画面,连续的帧就形成了我们看到的动画和视频。 但是直接采集后没经过处理的视频,其实是没有办法真正在互联网上进行传输的。以一张1920乘1080的图片为例&…

“蜀道山”高校联合公益赛 Web (部分)

文章目录 奶龙牌WAF海关警察训练平台恶意代码检测器 奶龙牌WAF <?php if ($_SERVER[REQUEST_METHOD] POST && isset($_FILES[upload_file])) {$file $_FILES[upload_file];if ($file[error] UPLOAD_ERR_OK) {$name isset($_GET[name]) ? $_GET[name] : basen…

【JavaEE初阶 — 网络原理】初识网络原理

目录 1. 网络发展史 1.1 独立模式 1.2 网络互连 1.2.1 网络互联的背景 1.2.2 网络互联的定义 1.3 局域网LAN 1.4 广域网WAN 2. 网络通信基础 2.1 IP地址 2.2 端口号 2.3 认识协议 2.4 五元组 2.5 协议分层 2.5.1 分…

Linux的介绍及虚拟机centOS系统的下载与应用

1、什么是Linux Linux 是一种类 Unix 操作系统&#xff0c;它的内核&#xff08;Kernel&#xff09;由 Linus Torvalds 于 1991 年首次发布。作为一个开源、免费的操作系统&#xff0c;Linux 被广泛用于服务器、桌面计算机、嵌入式设备、移动设备等各种场景。 1、操作系统 操…

Leetcode打卡:交替组II

执行结果&#xff1a;通过 题目&#xff1a;3208 交替组II 给你一个整数数组 colors 和一个整数 k &#xff0c;colors表示一个由红色和蓝色瓷砖组成的环&#xff0c;第 i 块瓷砖的颜色为 colors[i] &#xff1a; colors[i] 0 表示第 i 块瓷砖的颜色是 红色 。colors[i] 1 …

【ONE·基础算法 || 动态规划(二)】

总言 主要内容&#xff1a;编程题举例&#xff0c;熟悉理解动态规划类题型&#xff08;子数组、子序列问题&#xff09;。                文章目录 总言5、子数组问题&#xff08;数组中连续的一段&#xff09;5.1、最大子数组和&#xff08;medium&#xff09;5.1.…

Qt程序发布及打包成exe安装包

参考:Qt之程序发布以及打包成exe安装包 目录 一、简述 Qt 项目开发完成之后,需要打包发布程序,而因为用户电脑上没有 Qt 配置环境,所以需要将 release 生成的 exe 文件和所依赖的 dll 文件复制到一个文件夹中,然后再用 Inno Setup 打包工具打包成一个 exe 安装包,就可以…

通过抓包,使用frida定位加密位置

首先我们抓取一下我们要测试的app的某一个目标api&#xff0c;通过抓api的包&#xff0c;得到关键字。 例如&#xff1a;关键字&#xff1a;x-sap-ri 我们得到想要的关键字后&#xff0c;通过拦截 类&#xff0c;寻找我们的关键字&#xff0c;及找到发包收包的位置&#xff0c…

MFC图形函数学习12——位图操作函数

位图即后缀为bmp的图形文件&#xff0c;MFC中有专门的函数处理这种格式的图形文件。这些函数只能处理作为MFC资源的bmp图&#xff0c;没有操作文件的功能&#xff0c;受限较多&#xff0c;一般常作为程序窗口界面图片、显示背景图片等用途。有关位图操作的步骤、相关函数等介绍…

钟睒睒的“傲慢与偏见”

文章内容根据网络内容整理形成 最近&#xff0c;钟睒睒关于绿瓶水不适合长期饮用的言论&#xff0c;在网上引起了一番新的热议&#xff0c;让刚平静不久的包装饮用水竞争&#xff0c;再次掀起一阵波澜&#xff0c;同时&#xff0c;其对于企业家直播带货的等系列看法&#xff0c…

比亚迪降价令背后的反思,创新还是压榨?

科技新知 原创作者丨依蔓 编辑丨蕨影 比亚迪要求供应商明年起降价10%&#xff1f; 近日&#xff0c;网传一封有关比亚迪乘用车要求供应商降价的邮件&#xff0c;署名为比亚迪集团执行副总裁、乘用车首席运营官何志奇。 邮件称&#xff0c;2025年市场竞争将更加激烈&#xff0…

自媒体图文视频自动生成软件|03| 页面和结构介绍

代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; 视频图片生成器 一个基于 Python 和 Web 的工具&#xff0c;用于生成带有文字和语音的视频以及图片。支持多种尺寸、…

(11)(2.2) BLHeli32 and BLHeli_S ESCs(二)

文章目录 前言 1 传递支持 前言 BLHeli 固件和配置应用程序的开发是为了允许配置 ESC 并提供额外功能。带有此固件的 ESC 允许配置定时、电机方向、LED、电机驱动频率等。在尝试使用 BLHeli 之前&#xff0c;请按照 DShot 设置说明进行操作(DShot setup instructions)。 1 传…

逻辑处理器核心指纹修改

navigator.hardwareConcurrency的属性,可以用来获取CPU的逻辑处理器核心数。 1、navigator.hardwareConcurrency接口定义&#xff1a; third_party\blink\renderer\core\frame\navigator_concurrent_hardware.idl // https://html.spec.whatwg.org/C/#navigator.hardwarecon…

Linux下的火墙管理及优化

从功能角度来讲 防火墙是位于内部网和外部网之间的屏障&#xff0c;它按照系统管理员预先定义好的规则来控制数据包的进 从功能实现角度来讲 火墙是系统内核上的一个模块netfilter(数据包过滤机制) 通过netfiler来管理kernel space中的策略 netfilter简介 Netfilter是Lin…

chrome允许http网站打开摄像头和麦克风

第一步 chrome://flags/#unsafely-treat-insecure-origin-as-secure 第二步 填入网址&#xff0c;点击启用 第三步 重启 Chrome&#xff1a;设置完成后&#xff0c;点击页面底部的 “Relaunch” 按钮&#xff0c;重新启动 Chrome 浏览器&#xff0c;使更改生效。

【Vue】Ego商城项目跟做

技术栈 Vue全家桶&#xff1a;Vue VueRouter Vuex Axios ElementUI 依赖安装 网络请求&#xff1a;npm install --save axios --no-fund Element&#xff1a;vue add element 后端相关依赖&#xff1a;npm install --save express cors mysql --no-fund token&#xff1a;np…

ALSA(4) --- CPU DAI实践

CPU_DAI实践 物理拓扑图 上图可知&#xff0c;从dma过来数据&#xff0c;会保存在DAI的一个FIFO队列中&#xff0c;数据是并行过来的各个通道数据&#xff0c;经过shift移位寄存器&#xff0c;再经过P2S并行转串行&#xff0c;再经过DAVC音量控制输出到GPIO端口 音频数据接口…