《Opencv》基础操作<1>

news/2024/11/28 15:22:00/

目录

一、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 cv2gray_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 npkernel = np.ones(3,3)# 膨胀操作
dilated_image = cv2.dilate(image, kernel, iterations=1)
(2)、腐蚀操作
import cv2
import numpy as npkernel = 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 范数。


http://www.ppmy.cn/news/1550651.html

相关文章

Ubuntu20.04+ROS 进行机械臂抓取仿真:环境搭建(一)

目录 一、从官网上下载UR机械臂 二、给UR机械臂添加夹爪 三、报错解决 本文详细介绍如何在Ubuntu20.04ROS环境中为Universal Robots的UR机械臂添加夹爪。首先从官方和第三方源下载必要的软件包,包括UR机械臂驱动、夹爪插件和相关依赖。然后,针对gazeb…

【数据可视化入门】Python散点图全攻略:Matplotlib、Seaborn、Pyecharts实战代码大公开!

数据可视化入门-系列文章目录 Python散点图全攻略:Matplotlib、Seaborn、Pyecharts实战代码大公开! 文章目录 数据可视化入门-系列文章目录Python散点图全攻略:Matplotlib、Seaborn、Pyecharts实战代码大公开! 前言1. Matplotlib…

js 高亮文本中包含的关键词标红

在开发中&#xff0c;遇到需要将文本中包含的关键字高亮的情况&#xff0c;可以做以下处理。 <div class"title"v-html"highlightKeywords(item.title, state1.tags1.concat(state2.tags2).concat(state3.tags3))"> </div> ...... ...... con…

Ubuntu系统更新

在Ubuntu系统中&#xff0c;您可以使用以下命令来更新系统&#xff1a; 1、更新软件包列表&#xff1a; sudo apt update 2、升级所有已安装的包到最新版本&#xff1a; sudo apt upgrade 3、&#xff08;可选&#xff09;如果系统提示有某些包可以自动更新&#xff0c;并…

网络知识面试

1、http状态码 101: 切换请求协议 200:(请求成功)。服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 301 : (永久移动,永久性重定向,会缓存) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。…

ADSY1100

4 Tx/4 Rx&#xff0c;0.1 GHz 至 20 GHz Apollo MxFE 3UVPX 调谐器 数字化仪 处理器 特性 四个发射&#xff08;Tx&#xff09;通道 高达 28GSPS DAC 四个接收&#xff08;Rx&#xff09;通道 高达 20GSPS 的 ADC 可更换 RF 调谐器个性卡 0.1-20GHz 调谐 多调谐器选项 相位…

本地学习axios源码-如何在本地打印axios里面的信息

1. 下载axios到本地 git clone https://github.com/axios/axios.git 2. 下载react项目, 用vite按照提示命令配置一下vite react ts项目 npm create vite my-vue-app --template react 3. 下载koa, 搭建一个axios请求地址的服务端 a.初始化package.json mkdir koa-server…

如何做好一份技术文档

目录 1.概述 2.技术文档的规划布局 2.1. 确定文档类型和目标 2.2. 章节设置 2.2.1.引言部分 2.2.2.基础信息 2.2.3.核心内容 2.2.4.辅助内容 2.3. 确定逻辑顺序 2.4. 使用模板和样式 2.5. 持续改进 2.6.示例文档结构 3.技术文档的语言表达 3.1. 使用简洁的语言 …