opencv读入图片注意事项
来源:投稿 作者:蓬蓬奇
编辑:学姐
深度学习数据预处理中常用opencv读入图片,一般在__getitem__函数中调用。本文主要介绍opencv读取图片的一些细节以及注意事项。本文中使用的图片见第6节“opencv测试使用的图片”。
1.如何通过opencv显示图片?
通过Jupyter Notebook运行OpenCV,运行cv2.imshow()时报错。
import cv2img = cv2.imread(img_path, cv2.IMREAD_UNCHANGED)
cv2.imshow("img", img)
报错:
---------------------------------------------------------------------------
error Traceback (most recent call last)
Input In [60], in <cell line: 1>()
----> 1 cv2.imshow("img", img)error: OpenCV(4.6.0) /io/opencv/modules/highgui/src/window.cpp:1267: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'
解决方法:先卸载opencv,再重新安装。(未解决,可直接转下述方法)
conda remove opencv
conda install -c menpo opencvpip install --upgrade pip
pip install opencv-contrib-python
参考链接:https://blog.csdn.net/tudou2013goodluck/article/details/108402055
报错:内核崩溃。
Kernel Restarting
The kernel for Untitled.ipynb appears to have died. It will restart automatically.
解决方法:opencv读取图片,之后使用matplotlib库显示图片。
下述两个代码均可以:
%matplotlib inline
from matplotlib import pyplot as plt
import cv2img = cv2.imread('图片路径')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)plt.imshow(img)
plt.show()
import cv2def cv2_imshow(a, **kwargs):a = a.clip(0, 255).astype('uint8')# cv2 stores colors as BGR; convert to RGBif a.ndim == 3:if a.shape[2] == 4:a = cv2.cvtColor(a, cv2.COLOR_BGRA2RGBA)else:a = cv2.cvtColor(a, cv2.COLOR_BGR2RGB)return plt.imshow(a, **kwargs)
参考链接:https://github.com/jupyter/notebook/issues/3935
2.opencv读入图片默认为BGR
img_path = "00001.png" # 图片路径
mask_path = "00001_matte.png" # 对应的图像分割标签路径%matplotlib inline
from matplotlib import pyplot as plt
import cv2
import numpy as npimg_bgr = cv2.imread(img_path, cv2.IMREAD_COLOR)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # BGR->RGBplt.imshow(img)
plt.show()

第一幅图为原始图片,第二幅图为BGR图片,第三幅图为RGB图片。
3.opencv读入图片默认为HWC
img_rgb.shape
(800, 600, 3)
可以将HWC转变为CHW:
img_rgb = img_rgb.transpose((2, 0, 1)) # hwc --> chw
4.opencv读入图片默认为nd.array形式
cv2.imread()读取图片后以多维数组的形式保存图片信息。
type(img_rgb)
numpy.ndarray
可以转变为torch.tensor,.float()表示转变为torch.float32
img_chw_tensor = torch.from_numpy(img_rgb).float()
5.cv2.imread()
cv2.imread()有两个参数,第一个参数filename是图片路径,第二个参数flag表示图片读取模式,共有三种:
-
cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1。
-
cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0。
-
cv2.IMREAD_UNCHANGED:包括alpha(包括透明度通道),可以直接写-1。即以不改变图片的方式打开,图片是彩色就是彩色,图片是灰度图像就是灰度图像。
通过cv2.IMREAD_COLOR读入灰度图,三通道数值相同。
mask = cv2.imread(mask_path, cv2.IMREAD_GRAYSCALE) # 读入灰度图
mask1 = cv2.imread(mask_path, cv2.IMREAD_COLOR) # 读入彩色图
mask2 = cv2.imread(mask_path, cv2.IMREAD_UNCHANGED) # 读入原始图片print(mask.shape) # (800, 600)
print(mask1.shape) # (800, 600, 3)
print(mask2.shape) # (800, 600)

第一幅图为mask,第二幅图为mask1,第三幅图为mask2。
import numpy as np
np.set_printoptions(threshold=np.inf)# np.unique(mask1[:,:,0] == mask1[:,:,1])
print((mask1[:,:,0] == mask1[:,:,1]).all()) # True
print((np.unique(mask1[:,:,2] == mask).all()))
True
True
6.opencv测试使用的图片
可以右键保存下述图片,调试上面代码。


关注下方《学姐带你玩AI》🚀🚀🚀
回复“CVPR”领取CV顶会500多篇经典论文
码字不易,欢迎大家点赞评论收藏!
相关文章:
opencv读入图片注意事项
来源:投稿 作者:蓬蓬奇 编辑:学姐 深度学习数据预处理中常用opencv读入图片,一般在__getitem__函数中调用。本文主要介绍opencv读取图片的一些细节以及注意事项。本文中使用的图片见第6节“opencv测试使用的图片”。 1.如何通过o…...
学习渗透测试,考CISP-PTE还是考NISP-PT证书呢?
其实两者都可以,但是要看考生的实际需求! 为什么说两者都可以? 两个证书都由中国信息安全测评中心颁发,CISP-PTE(注册信息安全渗透测试工程师),NISP-PT(国家信息安全水平考试渗透测试工程师),…...
记录自己遇到的关于Hashmap的面试题
一.麻烦讲述一下Hashmap的扩容原理 jdk1.8中的hashmap扩容原理 1.put流程图 首先贴一张图(图片来源于传送门),多谢大佬的美图,此图已经完美的描述了put的整个流程,我也就不想自己画了,嘿嘿: 2.hashmap中几个比较重…...
mysql数据库之sql语句性能分析工具
一、sql执行频率。 mysql客户端连接成功后,通过show [session | global] status 命令可以提供服务器状态信息。通过如下指令,可以查看当前数据库的INSERT/UPDATE/DELETE的访问频次。 #一个下划线代表一个字符 show global status like com_; 二、慢查…...
搭建SpringBoot项目
文章目录前言准备工具创建项目前言 为什么使用SpringBoot?它有什么好处? SpringBoot可以快速构建出独立的Spring应用,简化了配置文件。内嵌Tomcat服务器,无须手动部署war文件。 准备工具 idea2022navicat16postmanjdk1.8 创建项目 File-&…...
“一网统管”视频融合平台EasyCVR页面tab切换细节优化
EasyCVR视频融合平台基于云边端协同架构,能支持海量视频的轻量化接入与汇聚管理,借助大数据分析的决策判断,为网络摄像头、网络存储设备、智能终端、无人机、车载设备、移动执法仪、视频监控平台等提供一体化的视频接入、分发、存储、处理等能…...
【Python入门第二十天】Python Lambda
lambda 函数是一种小的匿名函数。 lambda 函数可接受任意数量的参数,但只能有一个表达式。 语法 lambda arguments : expression执行表达式并返回结果: 实例 一个 lambda 函数,它把作为参数传入的数字加 10,然后打印结果&…...
比特数据结构与算法(第四章_下)二叉树OJ(力扣:144,965,104,226,100,572)
144. 二叉树的前序遍历难度简单给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root [1,null,2,3]输出:[1,2,3]示例 2:输入:root [ ]输出:[ ]示例 3:输入&#…...
【C++】inline 内联函数
文章目录📕 概念📕 使用前的准备📕 使用📕 特性📕 概念 在 C 中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了 inline 修饰符,表…...
如何审计一个智能合约
智能合约审计用于整个 DeFi 生态系统,通过对协议代码的深入审查,可以帮助解决识别错误、低效代码以及这些问题。智能合约具有不可篡改的特点,这使得审计成为任何区块链项目安全流程的关键部分。 代码审计对任何应用程序都很重要,…...
不用PS,也能实现抠图的工具
对于非设计专业的同学来说,专门下载 PS 抠图有点大材小用,而且运用 PS 对电脑配置一定要求。不过现在有了更多选择,市面上出现了越来越多的抠图软件,不过越多的抠图软件选择也意味着需要花费时间试错因此本文将给大家推荐 3 款非常…...
集群化存储的概述
集群化存储的概述 1、存储的分类方式: 存储的分类-网络拓扑 用于存储的网络拓扑 NAS:小米路由器;SAN:存储区网络–>网络网和存储网络区分开DAS:常见的存储;本地存储 存储分类-存储技术网络拓扑存储技…...
asyncio 并发编程(一)
Python2 时代高性能的网络编程主要是 Twisted、Tornado 和 Gevent 这三个库,但是它们的异步代码相互之间既不兼容也不能移植。Gvanrossum 希望在 Python 3 实现一个原生的基于生成器的协程库,其中直接内置了对异步 IO 的支持,这就是 asyncio&…...
春招冲刺(二):BFC 盒子面试题总结
BFC 盒子面试题总结 Q1:BFC盒子是什么? BFC全称是Block Formatting Context 意思就是块级格式化上下文。 可以把BFC看做一个容器,容器里边的元素不会影响到容器外部的元素。 Q2:如何创建BFC? 根元素:bo…...
Ep_计网面试题-本地IP地址怎么一层层向上转换?
将数据加上报头打包在一起形成新的数据包继续往下一层传递。拆包的时候就是把数据包去掉包头作为新数据传给上一层 视频讲解: https://edu.csdn.net/course/detail/38090 点我进入 面试宝典 很多人不知道面试问什么,或者其他的XXGuide,那里边的太多没用的,也没有源码解析,都…...
MySQL高级三
目录 三、MySQL高级03 3.1 MyCat 3.1.1 MyCat简介 3.1.2 中间件的作用 3.2 安装MyCat 3.3 主从复制 3.3.1 主从复制的原理 3.3.2 主从复制的好处 3.3.3 配置主从复制 三、MySQL高级03 如果虚拟机的磁盘已满,可以对磁盘进行重新分配 参考:虚拟…...
set和map的基本使用
目录 关联式容器 要点分析 键值对 pair介绍 set 模板参数列表: set的构造: 常用接口 操作 multiset map map的构造 插入 make_pair map的迭代器 operator[] multimap multimap中为什么没有重载operator[] 关联式容器 关联式容器也是用…...
已解决pip install wxPython模块安装失败
已解决(pip install wxPython安装失败)error: legacy-instal1-failure Encountered error while trying to install package.wxPython note: This is an issue with the package mentioned above,not pip. hint : See above for output from …...
Linux基础——连接Xshell7
个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…...
C++——智能指针1
目录 RAII auto_ptr模拟实现 智能指针拷贝问题 唯一指针 shared_ptr(可以拷贝) shared_ptr模拟实现 完整代码 循环引用 weak_ptr模拟实现 定制删除器 shared_ptr定制删除器模拟实现 内存泄漏 RAII RAII(Resource Acquisit…...
AceMenu:嵌入式轻量级菜单框架设计与实践
1. AceMenu 库概述:面向嵌入式人机交互的轻量级菜单框架AceMenu 是一个专为资源受限嵌入式系统设计的轻量级、可移植菜单管理库。其核心设计哲学是“以最少的硬件资源开销,实现最直观的用户导航体验”。不同于通用 GUI 框架(如 LVGL 或 Touch…...
asp毕业设计下载(全套源码+配套论文)——基于asp+access的公司门户网站设计与实现
基于aspaccess的公司门户网站设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于aspaccess的公司门户网站设计与实现,更多精选毕业设计项目实例见文末哦。 文章目录: 基于aspaccess的公司门户网站设计与实现&a…...
2026降AI率工具红黑榜:降AI率工具怎么选?一篇讲透
千笔AI、ThouPen、豆包是当前适配国内高校AI率检测规范的优质选择;需警惕低质免费工具、无正规检测对接、改写痕迹生硬的平台;建议按降AI效果、学术合规性、使用成本三维度筛选,优先匹配A-B-C模型。 一、红榜:10 款高分论文降AI率…...
League-Toolkit:英雄联盟智能助手的全方位解决方案
League-Toolkit:英雄联盟智能助手的全方位解决方案 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在快节奏的英雄联盟…...
飞行器设计避坑指南:盘点那些影响气动效率的‘隐形杀手’(从摩擦阻力到干扰阻力)
飞行器设计避坑指南:盘点那些影响气动效率的‘隐形杀手’ 记得第一次参加大学生飞行器设计竞赛时,我们的团队花了整整三个月打造了一架翼展两米的固定翼无人机。试飞当天,看着它摇摇晃晃地起飞,却在爬升阶段突然失速坠毁ÿ…...
PyTorch 2.8 + CUDA 12.4镜像实战教程:适配10核CPU+120GB内存的完整配置
PyTorch 2.8 CUDA 12.4镜像实战教程:适配10核CPU120GB内存的完整配置 1. 镜像概述与环境准备 1.1 核心特性介绍 这个深度优化镜像基于RTX 4090D 24GB显卡和CUDA 12.4驱动构建,专为高性能深度学习任务设计。主要特点包括: 硬件适配&#…...
OctoLinker:突破跨平台代码导航壁垒,实现无缝开发体验
OctoLinker:突破跨平台代码导航壁垒,实现无缝开发体验 【免费下载链接】OctoLinker OctoLinker — Links together, what belongs together 项目地址: https://gitcode.com/gh_mirrors/oc/OctoLinker 跨平台开发中,开发者常常面临不同…...
3大创新突破:FlashPatch如何让Flash内容重获新生
3大创新突破:FlashPatch如何让Flash内容重获新生 【免费下载链接】FlashPatch FlashPatch! Play Adobe Flash Player games in the browser after January 12th, 2021. 项目地址: https://gitcode.com/gh_mirrors/fl/FlashPatch 如何解决2021年后Flash内容无…...
M9A智能助手:《重返未来:1999》自动化管理解决方案
M9A智能助手:《重返未来:1999》自动化管理解决方案 【免费下载链接】M9A 1999 小助手 项目地址: https://gitcode.com/gh_mirrors/m9/M9A 玩家在《重返未来:1999》中常面临日常任务繁琐、资源管理复杂、多账号操作效率低等问题。M9A智…...
KDE vs直方图:7个真实数据集对比告诉你何时该用核密度估计
KDE vs直方图:7个真实数据集对比揭示核密度估计的最佳实践 在数据分析的日常工作中,我们常常需要快速理解数据的分布特征。直方图作为最基础的分布可视化工具,几乎成为每个数据分析师的第一选择。但当我第一次在电商用户行为分析中遇到双峰分…...
