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

news2024/11/14 19:23:52

目录

一、了解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,每帧图片表示frame
    ret,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表示切分的通道为R

cv2.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参数,那么图像的宽度和高度都会按照对应的比例进行调整。

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

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

相关文章

【轨物方案】红外抄表装置在光伏电站项目中的应用

首先,红外抄表装置能够实现远程自动抄表,这对于光伏电站来说至关重要。由于光伏电站往往分布在广阔的区域,且电站设备可能位于偏远或难以到达的位置,使用红外抄表装置可以减少人工抄表的需要,提高数据采集的效率和准确…

79、ansible-----playbook2

1、作业 [roottest1 opt]# vim test2.yaml - name: this is muluhosts: 192.168.168.22gather_facts: falsevars: ##定义变量testtest:- /opt/test1 ##对变量进行赋值- /opt/test2- /opt/test3- /opt/test4tasks:- name: create mulufile:path: "{{item}}&q…

K8s之自动扩缩容

Kubernetes (K8s) 的动态扩缩容(自动伸缩)功能是集群管理中非常关键的一部分,能够根据工作负载的变化自动调整应用程序的副本数,以确保资源的高效利用和服务的稳定性。 K8s介绍文章 容器之k8s(Kubernetes)-CSDN博客 1. 动态扩缩容…

文件包含漏洞(1)

目录 PHP伪协议 php://input Example 1&#xff1a; 造成任意代码执行 Example 2&#xff1a; 文件内容绕过 php://filer zip:// PHP伪协议 php://input Example 1&#xff1a; 造成任意代码执行 搭建环境 <meta charset"utf8"> <?php error_repo…

代码随想录算法训练营第51天|卡码网99. 岛屿数量、100. 岛屿的最大面积

1.卡码网99. 岛屿数量 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1171 文章链接&#xff1a;https://www.programmercarl.com/kamacoder/0099.岛屿的数量深搜.html#_99-岛屿数量 本题思路: 遇到一个没有遍历过的节点陆地&#xff0c;计数器就加一&#x…

银河麒麟桌面操作系统V10:如何设置应用开机自启动?

银河麒麟桌面操作系统V10&#xff1a;如何设置应用开机自启动&#xff1f; 1、图形界面设置2、命令行设置3、注意 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、图形界面设置 打开“设置”->“系统”->“开机启动”。点击“添加…

秋招突击——笔试整理——8/25——拼多多笔试整理

文章目录 引言正文第一题——多多删树个人解答 第二题、多多的奇数序列个人解答 第三题&#xff1a;多多换礼物个人解答参考实现 第四题、多多的字符反转个人实现 总结 引言 今天的拼多多笔试挺难的&#xff0c;感觉自己在技巧性还差很多&#xff0c;很多东西需要看很久&#…

第3章-02-Python库Selenium安装与讲解

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲,后续完整更新内容如下。 文章…

windows javascript 打开、关闭摄像头

1. 效果 打开摄像头 关闭摄像头&#xff08;包括指示灯也关了的&#xff09; 2. 代码 open_close_camera.html // open_close_camera.html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>use camera</title>…

CPP中lamada表达式作用一览[more cpp-6]

一般语法 CPP中的lambda 表达式的本质就是匿名函数&#xff0c;它可以在代码中定义一个临时的、局部的函数.为什么需要lamada表达式&#xff1f; 因为命名是个大问题 想名字以及避免命名冲突是很劳神费力的事&#xff0c;这就是lamada表达式的优点(lamada优点表现为简洁性)总…

7.Linux_GCC与GDB

GCC 1、GCC编译过程 首先使用编辑器对.c文件进行编辑&#xff0c;即&#xff1a;敲代码。之后GCC编译器会对.c文件进行预处理、编译、汇编、链接&#xff0c;最终输出可执行文件。具体流程如下&#xff1a; 四个阶段的含义及指令 1、预处理 指令&#xff1a;gcc - E <.…

专利服务系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;专利申请管理&#xff0c;分类号管理&#xff0c;专利管理&#xff0c;增值服务管理&#xff0c;业务指导信息管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页…

免费插件集-illustrator插件-Ai插件-路径节点分割路径

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件&#xff0c;加强illustrator使用人员工作效率&#xff0c;路径处理功能&#xff0c;功能是路径节点分割路径。首先从下载网址下载这款插件 https://download.csdn.net/down…

kubenetes--资源调度

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 出自B站博主教程笔记&#xff1a; 完整版Kubernetes&#xff08;K8S&#xff09;全套入门微服务实战项目&#xff0c;带你一站式深入掌握K8S核心能…

C语言 之 自定义类型:结构体

结构体类型的声明 结构体的声明 struct tag {member-list; //结构体中的成员&#xff0c;可以有多个 }variable-list; //这里是直接创建结构体的变量&#xff0c;但是不一定要在这里声明变量 //不能把后面这个 ; 省略了例如结构体用于描述一个学生&#xff1a; struct Stu…

48.给定一个 n × n 的二维矩阵表示一个图像,实现一个算法将图像原地顺时针旋转 90 度

48. Rotate Image 题目 你得到了一个 n x n 的二维矩阵,表示一张图像。 将图像顺时针旋转 90 度。 注意: 你必须 就地 旋转图像,这意味着你需要直接修改输入的二维矩阵。不能分配另一个二维矩阵来进行旋转。 示例 1: 输入: [ [1,2,3], [4,5,6], [7,8,9] ] 输出: [ [7,…

数据中台架构设计

由于当前项目需要对接多个不同的数据源&#xff0c;同时涉及到多端处理&#xff0c;而且需要考虑海量数据处理&#xff0c;还有总部与分部架构部署问题&#xff0c;因而整体技术栈倾向于大数据和分表分库式处理数据层接入问题。 简单讲&#xff0c;项目分为数据中台和业务中台…

介绍下线程池的七个参数

corePoolSize&#xff1a;核心线程数&#xff0c;池中要保留的线程数&#xff0c;即使它们处于空闲状态&#xff0c;除非设置了allowCoreThreadTimeOutmaximumPoolSize&#xff1a;最大线程数量keepAliveTime&#xff1a;线程存活时间unit&#xff1a;时间单位workQueue&#x…

【C++离线查询】2250. 统计包含每个点的矩形数目

本文涉及的基础知识点 离线查询 LeetCode2250. 统计包含每个点的矩形数目 给你一个二维整数数组 rectangles &#xff0c;其中 rectangles[i] [li, hi] 表示第 i 个矩形长为 li 高为 hi 。给你一个二维整数数组 points &#xff0c;其中 points[j] [xj, yj] 是坐标为 (xj,…

Linux——文件系统层次结构,绝对路径

一、文件系统层次结构 linux中所有文件存储在文件系统中&#xff0c;文件系统层次结构可以类比为一颗到立的树&#xff0c;最顶层为根目录/&#xff0c;根目录/底又分了/etc,/bin,/boot,/dev等子目录&#xff0c;而这些子目录底下又可以生成子目录分支。 以下为linux中较为重要…