OpenCV | 图像读取与显示

news2024/11/25 22:49:17

OpenCV 对图像进行处理时,常用API如下:

API描述
cv.imread根据给定的磁盘路径加载对应的图像,默认使用BGR方式加载
cv.imshow展示图像
cv.imwrite将图像保存到磁盘中
cv.waitKey暂停一段时间,接受键盘输出后,继续执行程序
cv.destroyAllWindows释放所有资源

目录

  • 一. OpenCV 基本操作函数
    • 1. cv.imread ( ) 图像读取
    • 2. cv.imshow ( ) 图像显示
      • 2.1 cv.imshow ( ) 展示全部
      • 2.2 cv.imshow ( ) 展示部分
      • 2.3 plt.imshow ( ) 图像显示
        • 方式一 指定通道
        • 方式二 cv.cvtColor ( )
    • 3. cv.waitKey ( ) 图像暂停时间
    • 4. cv.destroyAllWindows ( ) 释放资源

一. OpenCV 基本操作函数

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
'''设置不使用科学计数法'''
# 保留小数点后三位
# 设置不适用科学计数法
np.set_printoptions(precision=3, suppress=True)

1. cv.imread ( ) 图像读取

	cv2.imread(filepath,flags)
	参数:	
		filepath:要读入图片的完整路径
		flags:读入图片的标志,即默认是使用BGR模型加载图像
			   当设置为0时,表示灰度图像加载
			   当设置为1时,表示加载BGR图像, 默认为1
			   当设置为-1时,表示加载alpha透明通道的图像,即4通道
	数据格式:
		cv2.imread()的默认通道格式HWC,即img.shape
	作用:
		加载图像
		如果图像加载失败,那么返回的对象img为None
	特别注意:
		CV读取的数据为BGR

2. cv.imshow ( ) 图像显示

2.1 cv.imshow ( ) 展示全部

	cv.imshow(winname, mat)
	参数:
		winname:显示图像的窗口名称
		mat: 传入的图像
	注意:
		CV读取BGR图像
img = cv.imread("rabbit.png")

# 图像可视化
cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述

2.2 cv.imshow ( ) 展示部分

img = cv.imread('chicken.png')
'''写法一'''
img2 = img[:500, :400]

# 图像可视化
cv.imshow('image', img2)
cv.waitKey(0)
cv.destroyAllWindows()

'''写法二'''
# 图像可视化
cv.imshow('image', img[:500, :400, :])
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述

2.3 plt.imshow ( ) 图像显示

	【注意】
		matplotlib读取RGB图像
img = cv.imread("chicken.png")
print(img.shape)  # (583, 831, 3)
target_img = np.zeros_like(img, dtype=img.dtype)  # 用0填充相同shape的图像
print(target_img.shape)  # (583, 831, 3)
# plt读取的R、B通道值有误
target_img[:,:,0] = img[:,:,0]
target_img[:,:,1] = img[:,:,1]
target_img[:,:,2] = img[:,:,2]
plt.imshow(target_img)
plt.show()

在这里插入图片描述

方式一 指定通道
# plt读取正确的R、B通道值
target_img[:,:,0] = img[:,:,2]
target_img[:,:,1] = img[:,:,1]
target_img[:,:,2] = img[:,:,0]
plt.imshow(target_img)
plt.show()

在这里插入图片描述

方式二 cv.cvtColor ( )
cv.cvtColor(src, code, dst=None, dstCn=None)
	参数:
		src:输入图像
		code:颜色空间转换码
		dst:输出图像;大小、深度和原图像一致
		dstCn:
			目标图像的通道数; 
			如果参数是0,通道数自动由src和code决定
	作用:
		转换一种颜色空间到另一种颜色空间
img = cv.imread("chicken.png")

# 颜色空间转换
plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))        
plt.show()

在这里插入图片描述

3. cv.waitKey ( ) 图像暂停时间

	cv.waitKey( )
	作用:
		让图像暂停delay毫秒
	参数:
		当delay=0时,表示永远暂停; 直至键盘任意输入的时候,结束暂停
		当delay>0时,若在delay毫秒期间没有键盘输出值,则返回-1;否则返回键
	返回值:
		有返回值,返回值为输入字符对应的ASCII码
		即:waitKey返回值的范围为(0-255)
	转换:
		chr ( )
		ord ( )
# 读取图像数据
img = cv.imread("chicken.png")

# 根据不同的输入进行图像的操作
cv.imshow('image', img)

# 键盘输入为ESC时,输出k值并关闭图像窗口;否则,将图片另存为名为news.png新图片并关闭图像窗口
# 等待键盘的输入
k = cv.waitKey(0) & 0xFF
if k == 27:  # ESC(ACSII) = 27
    print(k)
    cv.destroyAllWindows()
    
# 当输入的是其他键的时候
else:
    cv.imwrite('news.png', img)
    cv.destroyAllWindows()

在这里插入图片描述

4. cv.destroyAllWindows ( ) 释放资源

cv.destroyAllWindows()

感谢阅读🌼
如果喜欢这篇文章,记得点赞👍和转发🔄哦!
有任何想法或问题,欢迎留言交流💬,我们下次见!
本文相关代码存放位置
    【Opencv1 图像的读取与显示

祝愉快🌟!


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

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

相关文章

力扣面试150 分发糖果 分步贪心

Problem: 135. 分发糖果 思路 👨‍🏫 参考:代码随想录 一次是从左到右遍历,只比较右边孩子评分比左边大的情况。一次是从右到左遍历,只比较左边孩子评分比右边大的情况。 复杂度 时间复杂度: O ( n ) O(n) O(n) …

代码随想录算法训练营第三十六天| LeetCode 435. 无重叠区间、763.划分字母区间、56. 合并区间

一、LeetCode 435. 无重叠区间 题目链接/文章讲解/视频讲解:https://programmercarl.com/0435.%E6%97%A0%E9%87%8D%E5%8F%A0%E5%8C%BA%E9%97%B4.html 状态:已解决 1.思路 本题的局部最优是尽量移除与某个区间重叠的其他区间,全局最优是移除的…

构建强健身体的未来:健身管理平台微服务架构解析

在现代社会,人们越来越关注健康和身体素质的提升。健身管理平台应运而生,为用户提供个性化的健身计划、监测和管理工具。微服务架构作为一种灵活且可扩展的系统设计方法,为健身管理平台提供了高效、可靠的基础。 1. 概述健身管理平台微服务架…

Open CASCADE学习|统计形状拓扑数量

边界表示法(Boundary Representation,简称B-Rep)是几何造型中最成熟、无二义的表示法。它主要用于描述物体的几何信息和拓扑信息。在边界表示法中,一个实体(Solid)由一组封闭的面(Face&#xff…

创建大量栅格文件并分别写入像元数据:C++ GDAL代码实现

本文介绍基于C语言GDAL库,批量创建大量栅格遥感影像文件,并将数据批量写入其中的方法。 首先,我们来明确一下本文所需实现的需求。已知我们对大量遥感影像进行了批量读取与数据处理操作——具体过程可以参考文章C GDAL提取多时相遥感影像中像…

nginx工作原理解析

目录 1、master-workers 的工作机制介绍 2、master-workers 的机制的好处 3、设置多少个 worker 4、最大连接数和支持的最大并发数的计算 1、master-workers 的工作机制介绍 nginx在启动后,会有一个master进程和一个或者多个相互独立的worker进程 过来的请求由…

HDLbits 刷题 --Exams/m2014 q4h

Implement the following circuit: 实现以下电路: module top_module (input in,output out);assign out in; endmodule 运行结果:

Spark_SparkSql写入Oracle_Undefined function.....将长字符串写入Oracle中方法..

在使用Spark编写代码将读库处理然后写入Oracle中遇到了诸多小bug,很磨人。shit!! 实测1:TO_CLOB(a3) 代码样例 --这是一个sparksql写入hive的一个小逻辑,我脱敏了噻 SELECT a1, a2, TO_CLOB(a3) AS clob_data, TO_DATE(a4) AS time FROM table1 WHERE…

关于Linux下的进程等待(进程篇)

目录 为什么存在进程等待&#xff1f;进程等待是在做什么&#xff1f; 怎样去执行进程等待&#xff1f; status options 为什么存在进程等待&#xff1f;进程等待是在做什么&#xff1f; 代码示例&#xff1a;模仿僵尸进程 #include <stdio.h> #include <unistd.…

3D-Aware Multi-Class Image-to-Image Translation with NeRFs

3D-Aware Multi-Class Image-to-Image Translation with NeRFs 利用NeRFs实现3D感知的多类图像到图像的翻译 Senmao Li1  Joost van de Weijer2  Yaxing Wang1 李森茂 1 范德维杰 2 王亚兴 1  Fahad Shahbaz Khan3,4  Meiqin Liu5  Jian Yang1 法哈德夏巴兹汗 3,4 刘梅琴 …

DSP笔记13-时间基准子模块Time base(TB)比较子模块Counter cpmpare(CC)

时间基准子模块Time base(TB) 同步&#xff0c;计数 CTR计数寄存器 PRD周期寄存器 CMP比较寄存器&#xff0c;占空比 EPWMA&#xff0c; EPWMB&#xff0c;两个比较寄存器&#xff0c;但只有以及计数寄存器以及一个周期寄存器 计数模式 计数时钟TBCLK HSPCLKDIVx x0,分…

存算架构优化:为大模型算力提升铺平道路

随着人工智能技术的飞速发展&#xff0c;大模型已经成为了推动各行各业进步的关键力量。从自然语言处理到图像识别&#xff0c;再到复杂的数据分析&#xff0c;大模型以其卓越的性能和广泛的应用前景&#xff0c;正逐渐成为AI领域的焦点。然而&#xff0c;大模型的高效运行离不…

Day 2. 2440相关知识点

1、arm的工作模式有哪些&#xff1f; ARM的工作模式分为普通模式、特权模式&#xff0c;其中特权模式又细分为六种模式 普通模式用户模式&#xff08;User&#xff09;大部分任务执行在这种模式 特权模式快速中断模式FIQ当一个高优先级&#xff08;fast) 中断产生时将会进入…

传输层协议——UDP/TCP协议

目录 端口号 端口号范围 pidof UDP协议 UDP协议格式 UDP特点 UDP缓冲区 UDP的注意事项 基于UDP的应用层协议 TCP协议 TCP协议格式 序号与确认序号 窗口大小 6个标记位 紧急指针 确认应答机制 连接管理机制 三次握手 四次挥手 超时重传机制 流量控制 滑动…

虚拟网络设备的真正使命:实现有控制的通信

在数字化时代&#x1f4f2;&#xff0c;网络安全&#x1f512;成为了企业和个人防御体系中不可或缺的一部分。随着网络攻击的日益复杂和频繁&#x1f525;&#xff0c;传统的物理网络安全措施已经无法满足快速发展的需求。虚拟网络设备&#x1f5a7;&#xff0c;作为网络架构中…

快速删除node_modules

1.rd /s /q node_modules 2.rimraf node_modules/ 亲测可用

「JavaEE」初识进程

初识进程 &#x1f349;进程&#x1f34c;操作系统的进程管理 &#x1f349;PCB 重要属性&#x1f34c;进程的身份标识&#x1f34c;内存指针&#x1f34c;文件描述符表&#x1f34c;进程的状态&#x1f34c;优先级&#x1f34c;记账信息&#x1f34c;上下文 &#x1f349;内存…

网络安全---RSA公钥加密与签名

实验项目&#xff1a;RSA公钥加密与签名实验 1.实验目的 本实验的学习目标是让学生获得 RSA 算法的动手经验。 通过课堂学习&#xff0c;学生应该已经了解 RSA 算法的理论部分&#xff0c; 知道在数学上如何生成公钥、私钥以及如何执行加密、解密和签名生成、验证。 通过使用…

前端保留两位小数

一、保留两位小数&#xff08;四舍五入&#xff09; 解决方案&#xff1a;使用 toFixed(x) 方法可以对小数进行指定位数保留&#xff0c;其中x是要保留的位数用法&#xff1a;num.toFixed(x)&#xff0c;其中num为需要操作的数据&#xff0c;x为要保留的位数示例&#xff1a;1…

【leetcode】动态规划::前缀和(二)

标题&#xff1a;【leetcode】前缀和&#xff08;二&#xff09; 水墨不写bug 正文开始&#xff1a; &#xff08;一&#xff09; 和为K的子数组 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续…