opencv读入图片注意事项
创始人
2024-06-02 10:22:14
0

来源:投稿 作者:蓬蓬奇
编辑:学姐

深度学习数据预处理中常用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 ()
----> 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多篇经典论文

码字不易,欢迎大家点赞评论收藏!

相关内容

热门资讯

安卓系统有小白条,便捷操作与个... 你有没有发现,在使用安卓手机的时候,屏幕下方总有一根小白条?这根小白条看似不起眼,却隐藏着不少秘密呢...
酷开还是安卓系统,深度解析两者... 亲爱的读者们,你是否在挑选智能电视时,对酷开系统和安卓系统感到纠结呢?别急,今天我就来给你详细剖析一...
电脑u盘装安卓系统,轻松实现移... 你有没有想过,把安卓系统装进电脑U盘里,是不是就能随时随地享受移动设备的便捷呢?想象不用再带着沉重的...
装了凤凰安卓系统进不去,无法进... 最近有个小伙伴遇到了一个棘手的问题,他的凤凰安卓系统手机突然装不进去了!这可真是让人头疼啊。下面,就...
安卓4.0导航系统,革新体验与... 你有没有想过,当你的手机升级到安卓4.0系统后,导航体验会有多么的翻天覆地?想象你正坐在车里,手握着...
怎样的才是安卓系统手机,怎样的... 你有没有想过,为什么安卓系统手机这么受欢迎呢?它们到底有什么特别的地方,让人爱不释手?今天,就让我带...
安卓什么系统最流畅省电,探寻最... 你有没有想过,为什么你的安卓手机有时候像蜗牛一样慢吞吞的,有时候又像火箭一样快?这背后其实和手机系统...
安卓系统限制如何解除,轻松解锁... 你是不是也和我一样,对安卓系统的限制感到头疼呢?有时候,那些小小的限制就像是无形的枷锁,束缚了我们的...
安卓系统网络电视盒子,智能娱乐... 你有没有发现,家里的电视越来越智能了?这不,最近我入手了一个安卓系统网络电视盒子,简直让我爱不释手。...
安卓穿越怎么更新系统,轻松实现... 亲爱的安卓用户们,你是否也和我一样,对手机系统更新充满了期待和好奇呢?每次系统更新,都仿佛给我们的手...
sony原生安卓系统吗,探索索... 你有没有想过,为什么有些手机用起来就是那么流畅,那么顺心?今天,我们就来聊聊这个话题:索尼手机的原生...
怎么给设备下安卓系统,设备安装... 你有没有想过,给家里的旧手机或者平板电脑装个全新的安卓系统,让它重获新生呢?这听起来是不是有点像给老...
安卓系统微信安装,畅享社交新体... 你有没有发现,最近你的手机里多了一个新伙伴——安卓系统微信安装?没错,就是那个我们每天离不开的社交神...
华为的安卓系统有哪些,打造智能... 你知道吗?华为的安卓系统最近可是火得一塌糊涂!作为一个紧跟科技潮流的数码爱好者,我可是对它充满了好奇...
安卓系统查询我的iphone,... 你有没有想过,你的安卓手机竟然能查询到你的iPhone信息?听起来是不是有点神奇?没错,这就是科技的...
致胜车载安卓系统刷机,畅享智能... 你有没有想过,你的车载安卓系统是不是已经有点儿“老态龙钟”了呢?别急,今天就来给你支个招——致胜车载...
安卓系统视频电话软件,便捷沟通... 你有没有想过,在这个信息爆炸的时代,即使身处千里之外,也能和亲朋好友实时畅聊呢?没错,就是那种可以边...
iphone14刷安卓系统,探... 你有没有想过,你的iPhone 14竟然也能装上安卓系统?是的,你没听错,就是那个以流畅著称的安卓系...
能够运行安卓的系统,兼容系统与... 你有没有想过,手机的世界里,竟然还有这样一群“异类”?它们不仅能够运行安卓系统,还能在性能和功能上与...
安卓免费私有云盘系统,探索安卓... 你有没有想过,你的手机里那些珍贵的照片、文件和视频,如果有一天突然丢失了,那该有多心疼啊!别担心,今...