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…...
系统化调试方法论:从STOP到DETECT,告别救火式排查
1. 项目概述:一套源自实战的系统化调试方法论如果你是一名开发者,或者正在和AI Agent打交道,大概率都经历过这种场景:线上服务突然报错,你心急火燎地登录服务器,看着日志里一堆堆的异常信息,脑子…...
英伟达汽车计算平台:从芯片到生态的自动驾驶全栈解决方案
1. 从GTC 2021看英伟达的汽车野心:不止于芯片的生态战争上周的GTC 2021大会信息量爆炸,光是汽车相关的发布就足以让整个行业消化好一阵子。作为一名长期跟踪汽车电子与自动驾驶技术演进的老兵,我习惯在每次大型技术发布会后,把那些…...
金融机器学习实战:从特征工程到投资组合优化的完整工具库解析
1. 项目概述:金融机器学习的开源宝库如果你在量化金融、算法交易或者金融数据分析领域摸爬滚打过一段时间,大概率会和我有同样的感受:从零开始构建一个可靠的金融机器学习(Financial Machine Learning, FML)研究或交易…...
ARM NEON指令集VLD1加载操作原理与优化实践
1. ARM SIMD指令集与VLD1加载操作概述在现代处理器架构中,SIMD(Single Instruction Multiple Data)技术已成为提升计算性能的关键手段。作为ARM架构中Advanced SIMD指令集(俗称NEON)的重要组成部分,VLD1系列…...
Claude代码会话实战指南:从问答到结构化协作的效能提升
1. 项目概述:Claude Code Session 的实战效能提升指南最近在深度使用 Claude 进行代码开发时,我发现了一个宝藏仓库:mantra-hq/claude-code-session-tips。这并非一个可以直接运行的软件库,而是一份由社区高手们精心整理的、关于如…...
避坑指南:Vivado FIR Compiler IP核配置的那些‘坑’(从MATLAB系数到FPGA实现)
Vivado FIR滤波器IP核实战避坑手册:从MATLAB系数到FPGA部署的12个关键检查点 当MATLAB的完美频响曲线遇上Vivado的硬件实现,FIR滤波器设计往往会遭遇理想与现实的落差。本文不重复基础操作流程,而是聚焦于那些让工程师深夜加班的典型问题场景…...
嵌入式开发中CHM文件的应用与优化
1. CHM文件在嵌入式开发中的核心价值CHM(Compiled HTML Help)作为微软推出的编译型帮助文档格式,在嵌入式开发领域已经服役超过20年。这种将HTML文档、索引和搜索功能打包成单一文件的格式,特别适合Keil MDK这类嵌入式开发环境的技…...
openclaw-nerve:构建自包含应用包,彻底解决跨平台部署难题
1. 项目概述与核心价值最近在折腾一些自动化脚本和工具链,发现很多开源项目在依赖管理、环境配置和跨平台部署上,依然存在不小的摩擦。一个典型的场景是:你从GitHub上clone了一个看起来很酷的项目,满心欢喜地准备跑起来看看效果&a…...
GitHub MDC文件渲染优化:基于UserScript的Markdown预览增强方案
1. 项目概述:让GitHub读懂Cursor的“规则文件”如果你和我一样,是Cursor的深度用户,那你肯定没少和.mdc文件打交道。这些文件是Cursor AI的“规则集”(Cursor Rules),本质上就是一份用Markdown语法写的项目…...
铝板椭圆成像无线传输损伤检测【附仿真】
✨ 长期致力于兰姆波、虚拟时间反转、损伤成像、压电陶瓷研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)铝板Lamb波频散特性与压电陶瓷PZT优化&#…...
