当前位置: 首页 > news >正文

《深度学习》OpenCV 计算机视觉入门 (上篇)

目录

一、了解OpenCV

1、简介

2、导包

3、了解图片构成

二、函数运用

1、展示图片

2、展示图片属性

1)img.shape  形状

2)img.dtype  类型

像素值类型: 

3)img.size   尺寸

4)演示,img为上图

3、展示灰度图

1)使用cv2.cvtColor()

2)直接使用参数

3)运行结果

4)对比

4、保存图片

5、了解视频构成

6、展示视频

1)videoCapture()

2)isopend()

3)read()

        • 返回值ret

        • 返回值frame

4)实例展示

7、图片的切片

8、切分图片通道

1)直接切分

2)split切分

9、图片部分打码

10、图片缩放

参数解释:


一、了解OpenCV

1、简介

        OpenCV(Open Source Computer Vision)是一个开放源代码的计算机视觉库,提供了一系列用于处理图像和视频的函数和算法。

        它可以用于开发各种计算机视觉应用程序,包括人脸检测、目标跟踪、图像分类、图像分割等。

        OpenCV支持多种编程语言,包括C++、Python和Java,并且可以在多个操作系统上运行,包括Windows、Linux和Mac OS X。OpenCV是一个广泛使用的计算机视觉库,被用于许多领域,如工业自动化、医学影像分析、机器人视觉等。

2、导包

pip install opencv-python==3.4.2
pip install opencv-contrib-python==3.4.2  # opencv扩展库,包含其他一些图像处理算法函数的扩展库

注意:此处两个版本必须相同,防止不兼容问题

3、了解图片构成

        一张图片由图像数据组成,图像数据是由像素(pixel)组成的。每个像素代表着图像中的一个点,每个像素包含了图像在该点处的颜色信息。图像的分辨率决定了图像中的像素数量,分辨率越高,图像越清晰。

        图像可以以不同的色彩模型来表示颜色,最常用的是RGB色彩模型。RGB色彩模型是一种加法色彩模型,其中的三个通道分别表示了红色R绿色G蓝色B亮度。通过调整这三个分量的数值,可以得到不同的颜色。

        此外,还有其他一些重要的图像属性,如亮度、对比度、饱和度等。亮度表示图像的明暗程度,对比度表示图像中不同颜色之间的差异程度,饱和度表示图像的颜色鲜艳程度

二、函数运用

1、展示图片

import cv2  # 导入OpenCV 包img = cv2.imread('girl.jpg') # 读取图片
cv2.imshow("aa",img)  # 展示图片,展示图片的标签名字为aa
cv2.waitKey(10000)  # 图片展示时间,其内参数为毫秒,如果参数设置为0,可以点击键盘任意键关闭图片
cv2.destroyAllWindows() # 用于关闭所有已经创建的窗口。

运行结果如下所示:(图像来源网络,如有侵权敬请告知删除)

2、展示图片属性

1)img.shape  形状

        用于获取图像的形状信息。它返回一个包含图像行数、列数和通道数的元组。

2)img.dtype  类型

        用于获取图像的数据类型。它返回一个描述图像像素值类型的字符串。

像素值类型: 
  • uint8:无符号8位整型,表示像素值范围为 0-255。
  • int8:有符号8位整型,表示像素值范围为 -128-127。
  • uint16:无符号16位整型,表示像素值范围为 0-65535。
  • int16:有符号16位整型,表示像素值范围为 -32768-32767。
  • float32:32位浮点型,表示像素值范围为 -∞-∞。
  • float64:64位浮点型,表示像素值范围为 -∞-∞。

3)img.size   尺寸

        用于获取图像的尺寸信息。它返回一个包含两个元素的元组,表示图像的高度和宽度。

4)演示,img为上图
print("图片形状:",img.shape)
print("图片数据类型:",img.dtype)
print("图形大小:",img.size)

运行结果如下图,

图像形状所示内容表示,宽度为940个像素,高度为627个像素,通道数为3,即RGB三通道

这里的图像尺寸为图像形状的三个值相乘

3、展示灰度图

1)使用cv2.cvtColor()
img = cv2.imread('girl.jpg')  # 导入彩色图片
img1 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  # 转变为灰度图
2)直接使用参数
img = cv2.imread('girl.jpg',cv2.IMREAD_GRAYSCALE)
3)运行结果

4)对比

        调试模式下可以看到彩色图片的格式为:

        灰度图下的格式为:

        此时少了一个rgb三通道数

4、保存图片

cv2.imwrite(r'./girl_gray.jpg',img)  # 这里的./表示当前目录下,命名为girl_gray.jpg

5、了解视频构成

        一个视频由一系列连续的图像帧组成。每一帧都是一个静止的图像,当这些图像以一定的速率连续播放时,就会形成动态的视频。视频的每一帧都包含了图像的像素信息,包括颜色、亮度等。通过在一定的时间间隔内连续播放这些帧,就能够产生流畅的视频效果。

        除了图像帧之外,视频还可以包含音频轨道、元数据以及其他附加信息。在视频文件中,这些信息以特定的文件格式(如AVI、MP4等)进行封装,以便能够方便地进行存储和传输。

6、展示视频

1)videoCapture()

        创建一个视频捕捉对象,括号内写入参数为视频地址,也可以设置参数为0,则表示捕获当前电脑默认摄像头,如果有多个摄像头可用,可以传入不同的数字来选择相应的摄像头。

2)isopend()

        用于判断视频捕获对象是否捕获成功,返回布尔值true、false

3)read()

        读取捕获的视频的下一帧图像,一帧表示一个图像,这里可以使用死循环来不断读取所有的帧,

        • 返回值ret

                用于判断是否读取成功,返回布尔值true和false

        • 返回值frame

                用于表示读取到的帧,类型为numpy数组,可以对其进行处理,如显示、保存、分析

4)实例展示
import cv2
video_capture = cv2.VideoCapture("tiger9.mp4")  # 创建一个视频捕捉对象if not video_capture.isOpened():   # 判断是否捕获成功print("错误")exit()while True:# ret返回bool值,读取成功为ret,每帧图片表示frameret,frame = video_capture.read()if not ret:break
# 灰度图frame = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)cv2.imshow('video',frame)
# 每帧图片停留时间,如果键入esc则停止if cv2.waitKey(30) == 27:break
# 释放资源
video_capture.release()
cv2.destroyAllWindows()

此处的cv2.waitkey(30) == 27 用于判断键盘点击位置是否是esc键,其值对应为ascll码

运行结果为:

7、图片的切片

import cv2
a = cv2.imread('girl.jpg')  # 导入图片
a_new = a.copy()  # 复制图片
# 切片
b = a_new[100:300,100:500]  # 高宽,高度为像素值范围为100~300,宽度范围为100~500
cv2.imshow('bb',b)  # 展示图片
cv2.waitKey(10000)
cv2.destroyAllWindows()

其运行结果为:

8、切分图片通道

1)直接切分
import cv2
a = cv2.imread('girl.jpg')a1 = a[:,:,0]  # 0表示切分的通道为B
a2 = a[:,:,1]  # 1表示切分的通道为G
a3 = a[:,:,2]  # 2表示切分的通道为Rcv2.imshow('B',a1) 
cv2.waitKey(0)

此时展示的图片为灰色的,如果想展示带切分通道颜色的,可以增加以下内容:

a[:,:,0] = 0  # 将B通道值改变为0
a[:,:,1] = 0  # 将G通道值改变为0
cv2.imshow('R',a) # 展示a图

此时展示画面为:

2)split切分
b,g,r = cv2.split(img) 

此时返回三个参数,分别表示bgr三通道的图片

9、图片部分打码

import cv2
import numpy as np
a = cv2.imread('girl.jpg')
a[100:200,200:300] = np.random.randint(0,256,(100,100,3))  
cv2.imshow('a',a)
cv2.waitKey(1000)
cv2.destroyAllWindows()

a[100:200,200:300] 表示图片的切片,即将高100~200,宽200~300的位置取出

np.random.randint(0,256,(100,100,3)) 使用numpy函数里的random.randint随机生成整数,括号内参数表示0~256之间的随机整数,(100,100,3)表示生成的形状为一个100x100大小的二维数组,每个元素是一个包含3个随机整数的一维数组。

运行结果为:

10、图片缩放
import cv2
a = cv2.imread('girl.jpg')
a_new = cv2.resize(a,dsize=None,fx=1.3,fy=1.3) # 将图片高宽都更改为1.3倍
cv2.imshow("aa",a_new)
cv2.waitKey(10000)
cv2.destroyAllWindows()
参数解释:

        a_new = cv2.resize(a,dsize=None,fx=1.3,fy=1.3)

  • a 是要调整大小的输入图像。
  • dsize 是目标图像的大小,可以通过设置dsize参数来指定目标图像的大小,或者通过设置fxfy参数来按比例调整图像大小。例如cv2.resize(a,(400,500))
    • 如果dsize参数不为None,则将图像调整为dsize指定的大小。
    • 如果fxfy参数都为None,则图像大小不会改变,返回与输入图像一样大小的图像。
    • 如果只设置了fx参数,那么图像的宽度会按照fx的比例进行调整,高度会根据宽度的比例自动调整。
    • 如果只设置了fy参数,那么图像的高度会按照fy的比例进行调整,宽度会根据高度的比例自动调整。
    • 如果同时设置了fxfy参数,那么图像的宽度和高度都会按照对应的比例进行调整。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • P(查准率) R(查全率) AP mAP最通俗准确的讲解
  • Django使用视图动态输出CSV以及PDF的操作详解例子解析
  • sheng的学习笔记-AI-生成式方法
  • 【PyQt6 应用程序】QTDesigner生成ui文件转成py源码并执行
  • 编译报错declaration may not appear after executable statement in block
  • 图数据库查询语言 cypher 与 memgraph
  • vscode附着调试
  • Day47 | 110.字符串接龙 105.有向图的完全可达性 106.岛屿的周长
  • openGuass——一般元命令
  • Vue JS执行机制和nextTick
  • Python算法工程师面试整理-微积分
  • SAP商业地产管理(RE-FX)
  • 微信小程序如何存储值
  • 集成mybatis-plus框架
  • 3.3、matlab彩色图和灰度图的二值化算法汇总
  • 深入了解以太坊
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • C++11: atomic 头文件
  • Centos6.8 使用rpm安装mysql5.7
  • GitUp, 你不可错过的秀外慧中的git工具
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • LintCode 31. partitionArray 数组划分
  • python学习笔记-类对象的信息
  • Vue.js源码(2):初探List Rendering
  • Zsh 开发指南(第十四篇 文件读写)
  • 番外篇1:在Windows环境下安装JDK
  • 简单实现一个textarea自适应高度
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 聊聊hikari连接池的leakDetectionThreshold
  • 巧用 TypeScript (一)
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 我这样减少了26.5M Java内存!
  • 线上 python http server profile 实践
  • Linux权限管理(week1_day5)--技术流ken
  • 大数据全解:定义、价值及挑战
  • 正则表达式-基础知识Review
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • #70结构体案例1(导师,学生,成绩)
  • #define与typedef区别
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (2)空速传感器
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (六)DockerCompose安装与配置
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (七)c52学习之旅-中断
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (转载)Google Chrome调试JS
  • (转载)hibernate缓存
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .Net Memory Profiler的使用举例
  • .NET Project Open Day(2011.11.13)