OpenCV 基础图像处理

1、生成图像

cv2.imread是OpenCV库中的一个函数,用于读取图像文件。它接受一个参数,即要读取的图像文件的路径,返回一个多维数组,
表示图像的像素值。该函数的常用参数包括:'flags':指定读取图像的方式,包括cv2.IMREAD_COLOR(读取彩色图像),cv2.IMREAD_GRAYSCALE(读取灰度图像)等。'encoding':指定图像的编码方式,默认为None。'decoder':指定解码器,默认为None。

 

import cv2image = cv2.imread('images/lena.png')  
# imread函数读取了图像文件,并将其数据存储在变量'image'中print(image)  
# 打印的结果是一个多维数组,表示图像的像素值

2、显示图像

cv2.waitKey()是OpenCV库中的一个函数,用于等待用户按键。
它接受一个参数,表示等待的时间(以毫秒为单位),如果没有按键按下,则返回-1。
如果参数为0,则无限期等待用户按键。

 

import cv2image = cv2.imread('images/lena.png') 
# 读取图像文件,并将其数据存储在变量'image'中cv2.imshow('lena', image)              
# 创建一个名为'lena'的窗口,并在该窗口中显示我们刚刚读取的图像cv2.waitKey(0)                         
# 无限期地等待用户按键。参数0表示无限期等待。cv2.destroyWindow('lena')              
# 关闭名为'lena'的窗口

3、保存图像

cv2.imwrite(filename, img[, params])filename:要写入的文件名,包括文件路径和文件扩展名。img:要写入的图像数据,可以是单通道灰度图像,也可以是三通道彩色图像。params:可选参数,包括一些写入图像的质量、压缩比等参数,如[int(IMWRITE_JPEG_QUALITY), int(IMWRITE_PNG_COMPRESSION)]。

 

import cv2# 读取图像
img = cv2.imread('images/lena.png')# 写入图像
# 将变量'img'中的图像数据写入到名为'result.bmp'的文件中
result = cv2.imwrite('result.bmp', img)  

4、读取视频

cv2.VideoCapture是OpenCV库中的一个函数,用于读取视频文件或摄像头的视频流。
它的主要作用是从本地或网络中读取视频帧,并将其预存储到内存中,以便进行后续的图片处理或特征提取等操作。

 

import cv2video = cv2.VideoCapture('images/video.mp4') # 创建VideoCapture对象 这个对象可以读取视频文件,这里读取的是位于'images/video.mp4'路径的视频文件fps = video.get(cv2.CAP_PROP_FPS)  
# 读取视频的帧速率 帧率是指每秒显示的帧数height = video.get(cv2.CAP_PROP_FRAME_HEIGHT)  
# 获取视频的高度
weight = video.get(cv2.CAP_PROP_FRAME_WIDTH)  
# 获取视频的宽度print('FPS:', fps)  
# 打印视频的帧率print('The video size: ', height, weight)  
# 打印视频的大小,即其帧的高度和宽度

FPS: 24.12565445026178
The video size:  860.0 540.0

5、读取并播放视频

import cv2video = cv2.VideoCapture('images/video.mp4')  
# "创建一个VideoCapture对象,用于读取视频文件while video.isOpened():  # 当视频文件成功打开时,进入循环。ret, frame = video.read()  # 使用read方法读取视频的一帧,ret为布尔值,表示是否读取成功,frame为读取到的一帧cv2.imshow('video', frame)  # 使用imshow方法显示视频,窗口的名称为'video',显示的内容为framekey = cv2.waitKey(30)  # 等待30毫秒,看用户是否有键盘输入# 按ESC键退出if key == 27:break    # 如果用户输入的是ESC键(ASCII值为27),则退出循环video.release()  
# 释放VideoCapture对象cv2.destroyAllWindows()  
# 关闭所有的OpenCV窗口

6、查看图像属性

import cv2imageColor = cv2.imread('images/lena.png')
print('图像的大小和通道数:', imageColor.shape)  
# 在OpenCV中,一个彩色图像的形状是(高度, 宽度, 颜色通道),而颜色通道通常为3(RGB)print('图像总的像素个数:', imageColor.size)   
# 可以通过.size属性得到图像的总像素数print('图像的数据类型:', imageColor.dtype)   
# 图像的数据类型通常是'uint8',表示每个像素值的范围是0-255

图像的大小和通道数: (256, 256, 3)
图像总的像素个数: 196608
图像的数据类型: uint8

7、生成灰色图像

生成一个256x256的黑色图像,所有像素的值都被设置为0
np.zeros([256, 256], dtype=np.uint8)

 

import cv2gray = np.random.randint(0, 256, size=[256, 256], dtype=np.uint8)
# 使用numpy的random.randint函数创建了一个256x256的二维数组,
# 数组中的每个值都是0到255之间的随机整数,数据类型为无符号8位整数(uint8)。
# 这个数组代表一张灰度图像,其中每个值表示一个像素的灰度值。
cv2.imshow('gray-image', gray)
# 用imshow函数显示上面创建的灰度图像。'gray-image'是窗口的名称,gray是要显示的图像
cv2.waitKey(0)  
cv2.destroyAllWindows()  

8、转换灰度图像

import cv2imageColor = cv2.imread('images/lena.png')
# imread函数读取了一个图像文件,文件路径是'images/lena.png',并将其保存到变量imageColor中。
# 这个函数会将图像读取为彩色图像,除非另外指定。
cv2.imshow('color', imageColor)
imageGrey = cv2.imread('images/lena.png', 0)
# 0是cv2.IMREAD_GRAYSCALE的别名,表示将图像读取为灰度图像
cv2.imshow('grey', imageGrey)
imageGrey2 = cv2.imread('images/lena.png', cv2.IMREAD_REDUCED_GRAYSCALE_2)
# cv2.IMREAD_REDUCED_GRAYSCALE_2表示将图像读取为灰度图像,并将颜色深度降低到2
cv2.imshow('grey2', imageGrey2)
img = cv2.imread('images/lena.png', cv2.IMREAD_REDUCED_COLOR_4)
# cv2.IMREAD_REDUCED_COLOR_4表示将图像读取为彩色图像,并将颜色深度降低到4
cv2.imshow('color2', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

9、通道拆分

"""读取一张图像,并分离出它的红、绿、蓝三个颜色通道"""
import cv2image = cv2.imread('images/lena.png')
# 将图像的三个颜色通道(蓝、绿、红)分离出来。
# 在OpenCV中,图像的颜色通道顺序是BGR
b = image[:, :, 0]
g = image[:, :, 1]
r = image[:, :, 2]# 使用imshow函数分别显示蓝、绿、红三个颜色通道。
cv2.imshow('B channel', b)
cv2.imshow('G channel', g)
cv2.imshow('R channel', r)cv2.waitKey(0)
cv2.destroyAllWindows()

import cv2image = cv2.imread('images/lena.png')# 将图像分离成三个颜色通道,分别对应蓝色(B)、绿色(G)和红色(R)
b, g, r = cv2.split(image)
cv2.imshow('B channel', b)
cv2.imshow('G channel', g)
cv2.imshow('R channel', r)cv2.waitKey(0)
cv2.destroyAllWindows()

10、通道合并

import cv2image = cv2.imread('images/lena.png')b, g, r = cv2.split(image)  
# 分割成三个通道,分别是蓝色通道(b)、绿色通道(g)和红色通道(r)imageRGB = cv2.merge([r, g, b])  
# 红色、绿色和蓝色通道按照RGB顺序合并成一个新的图像imageGRB = cv2.merge([g, r, b])  
# 绿色、红色和蓝色通道按照GRB顺序合并成一个新的图像cv2.imshow('image', image)  
# 显示原始图像cv2.imshow('imageRGB', imageRGB)  
# 显示RGB顺序的图像cv2.imshow('imageGRB', imageGRB)  
# 显示GRB顺序的图像cv2.waitKey(0)
cv2.destroyAllWindows()

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

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

相关文章

python——Django框架

一、基本介绍 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。 使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 Django 本身基于 MVC …

【已解决】opencv 交叉编译 ffmpeg选项始终为NO

一、opencv 交叉编译没有 ffmpeg ,会导致视频打不开 在交叉编译时候,发现在 pc 端能用 opencv 打开的视频,但是在 rv1126 上打不开。在网上查了很久,原因可能是 交叉编译过程 ffmpeg 造成的。之前 ffmpeg 是直接用 apt 安装的&am…

asp.net core 远程调试

大概说下过程: 1、站点发布使用Debug模式 2、拷贝到远程服务器,以及iis创建站点。 3、本地的VS2022的安装目录:C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE下找Remote Debugger 你的服务器是64位就拷贝x64的目…

【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流)

🎊专栏【JavaSE】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🎄缓冲流🍔字节缓冲流🛸一次读取…

【通意千问】大模型GitHub开源工程学习笔记(1)--依赖库

9月25日,阿里云开源通义千问140亿参数模型Qwen-14B及其对话模型Qwen-14B-Chat,免费可商用。 立马就到了GitHub去fork。 GitHub: GitHub - QwenLM/Qwen: The official repo of Qwen (通义千问) chat & pretrained large language model proposed b…

协议栈——收发数据(拼接网络包,自动重发,滑动窗口机制)

目录 协议栈何时发送数据~ 数据长度 IP模块的分片功能 发送频率 网络包序号~利用syn拼接网络包ack确认网络包完整 确定偏移量 服务器ack确定收到数据总长度 序号作用 双端告知各自序号 协议栈自动重发机制 大致流程 ack等待时间如何调整 是…

Leetcode202. 快乐数

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0…

【单片机】13-实时时钟DS1302

1.RTC的简介 1.什么是实时时钟(RTC) (rtc for real time clock) (1)时间点和时间段的概念区分 (2)单片机为什么需要时间点【一定的时间点干什么事情】 (3)RTC如何存在于…

Redis中Hash类的操作

Redis中Hash类型是键值对的形式保存数据,其中键被称为字段(field),值称为字段值(value)。在一个key中,字段不能重复,而值可以重复。无论是字段还是值都是无序的(保存的次…

Java 大厂八股文面试专题-JVM相关面试题 垃圾回收算法 GC JVM调优

Java 大厂八股文面试专题-JVM相关面试题 类加载器_软工菜鸡的博客-CSDN博客 3 垃圾收回 3.1 简述Java垃圾回收机制?(GC是什么?为什么要GC) 难易程度:☆☆☆ 出现频率:☆☆☆ 为了让程序员更专注于代码的实现…

【Flink】

事件驱动型应用 核心目标:数据流上的有状态计算 Apache Flink是一个框架和分布式处理引擎,用于对无界或有界数据流进行有状态计算。 运行逻辑 状态 把流处理需要的额外数据保存成一个“状态”,然后针对这条数据进行处理,并且更新状态。这就是所谓的“…

MySQL explain SQL分析工具详解与最佳实践

目录 一、explain工具介绍二、添加示例表和数据用于后续演示三、explain中的列3.1、id列3.2、select_type列3.3、table列3.4、partitions列3.5、type列NULLsystemconsteq_refrefrangeindexALL 3.6、possible_keys列3.7、key列3.8、key_len列3.9、ref列3.10、rows列3.11、filter…

HDFS最基础使用

文章目录 一、简介1、定义2、HDFS优缺点3、HDFS组成架构4、HDFS文件块大小 二、HDFS的读写流程1、HDFS写数据流程2、HDFS读数据流程3、网络拓扑-节点距离计算4、机架感知(副本存储节点选择) 三、NameNode和SecondaryNameNode1、NN和2NN工作机制2、Fsimag…

Linux关于gittee的远端仓库的连接和git三板斧

目录 1.网页操作 2.Linux操作 查看Linux系统中是否安装git指令 安装git指令 链接远端仓库 设置 .gitignore文件 3.git三板斧 1.网页操作 首先我们要在gittee建立一个仓库 这是我自己的勾选方案,大家可以参考一下。 这个方案勾选最下面的三个选项才有&#x…

java图书管理系统

一、 引言 图书管理系统是一个用于图书馆或书店管理图书信息、借阅记录和读者信息的应用程序。本系统使用Java Swing框架进行开发,提供直观的用户界面,方便图书馆管理员或书店工作人员对图书信息进行管理。以下是系统的设计、功能和实现的详细报告。 二…

最新整理源码面试题

经典框架源码面试题 Lecture:波哥 1.谈谈你对框架的理解 1.1 框架的作用 JavaWeb中的框架是一种开发工具或者平台,它提供了一系列的功能和组件,用于简化和加速Web应用的开发过程。框架可以提供一些基础设施,如数据库访问、用户认…

ISP图像信号处理——白平衡校正和标定介绍以及C++实现

从数码相机直接输出的未经过处理过的RAW图到平常看到的JEPG图有一系列复杂的图像信号处理过程,称作ISP(Image Signal Processing)。这个过程会经过图像处理和压缩。 参考文章1:http://t.csdn.cn/LvHH5 参考文章2:htt…

基于蜉蝣优化的BP神经网络(分类应用) - 附代码

基于蜉蝣优化的BP神经网络(分类应用) - 附代码 文章目录 基于蜉蝣优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.蜉蝣优化BP神经网络3.1 BP神经网络参数设置3.2 蜉蝣算法应用 4.测试结果:5.M…

AAD基础知识(identity/token/PRT)

简介 AAD(Azure Active Directory/Azure AD)是微软基于云身份验证和访问控制的解决方案,通过SSO登录其他o365应用(word/outlook/teams…) 微软在2023年7月把AAD重命名为Microsoft Entra ID,官网:https://www.microsoft.com/zh-cn/security/b…

【多任务案例:猫狗脸部定位与分类】

【猫狗脸部定位与识别】 1 引言2 损失函数3 The Oxford-IIIT Pet Dataset数据集4 数据预处理4 创建模型输入5 自定义数据集加载方式6 显示一批次数据7 创建定位模型8 模型训练9 绘制损失曲线10 模型保存与预测 1 引言 猫狗脸部定位与识别分为定位和识别,即定位猫狗…