python-openCV-Matplotlib-读取和显示图像时应注意的一个小问题

1. 计划实现的功能

1,读取图像
2,显示图像
3,绘制矩形框

%matplotlib inline
import matplotlib
import matplotlib.patches as patches
import matplotlib.pyplot as plt
import cv2

img=cv2.imread("lena.png")
plt.figure()
plt.imshow(img)
currentAxis=plt.gca()
rect=patches.Rectangle((50, 150),200,100,linewidth=1,edgecolor='r',facecolor='none')
currentAxis.add_patch(rect)

使用cv2.imread读取图像到img,使用matplotlib将img显示到figure中。

2. 遇到的问题

发现显示的图像偏蓝色。

3. 分析原因

这是因为matplotlib使用的颜色模式是我们流行的RGB模式,而opencv使用的BGR模式。因此,在使用matplotlib显示之前先要做一下图像颜色的转换。

# 将BGR图像转变为RGB图像
cv_rgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

python-openCV-Matplotlib-读取和显示图像时应注意的一个小问题_第1张图片

4.解决方法(一)

修改之后的代码:

%matplotlib inline
import matplotlib
import matplotlib.patches as patches
import matplotlib.pyplot as plt
import cv2

img=cv2.imread("lena.png")
# 将BGR图像转变为RGB图像
cv_rgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

plt.figure()
plt.imshow(img)
currentAxis=plt.gca()
rect=patches.Rectangle((50, 150),200,100,linewidth=1,edgecolor='r',facecolor='none')
currentAxis.add_patch(rect)

使用cv2.imread读取图像到img,使用matplotlib将img显示到figure中。
发现显示的图像偏蓝色。
这是因为matplotlib使用的颜色模式是我们流行的RGB模式,而opencv使用的BGR模式。因此,在使用matplotlib显示之前先要做一下图像颜色的转换。

5.解决方法(二)

也可以直接用matplotlib读取图像,修改之后的代码如下:

%matplotlib inline
import matplotlib
import matplotlib.patches as patches
import matplotlib.pyplot as plt

img=matplotlib.image.imread("lena.png")
plt.figure()
plt.imshow(img)
currentAxis=plt.gca()
rect=patches.Rectangle((50, 150),200,100,linewidth=1,edgecolor='r',facecolor='none')
currentAxis.add_patch(rect)

现在可以正常显示了,如下图所示:
python-openCV-Matplotlib-读取和显示图像时应注意的一个小问题_第2张图片

6. 延伸阅读

6.1 Python的图像库(Opencv、PIL、matplotlib、skimage)的使用

https://blog.csdn.net/qq_36941368/article/details/82998296

6.1.1 OpenCV

OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

6.1.2 PIL(Python Imaging Library)

PIL(Python Imaging Library),即Pillow,相比opencv更为轻巧。Image模块是在Python PIL图像处理中常见的模块,对图像进行基础操作的功能基本都包含于此模块内。如open、save、show等功能。
读取操作

6.1.3 Matplotlib

Matplotlib是一个Python 2D绘图库,它可以在不同的平台上以各种硬拷贝格式和交互环境生成发布质量数据。Matplotlib可以用于Python脚本、Python和IPython shell、Jupyter notebook、web应用服务器和四个图形用户界面工具包。对于简单的绘图,pyplot模块提供了一个类似于matlab的接口,特别是与IPython结合使用时。对于power用户,您可以通过面向对象的界面或通过MATLAB用户熟悉的一组函数来完全控制线样式、字体属性、轴属性等.

6.1.4 scikit-image

scikit-image是一组用于图像处理和计算机视觉的算法。“skimage”的主要包只提供了一些用于转换图像数据类型的实用程序;大多数功能程序存在其子包中。读取功能包含在io模块中。

6.2 python计算机视觉编程——第一章(基本的图像操作和处理)

https://blog.csdn.net/jiaoyangwm/article/details/79293272#13-numpy%E5%BA%93

你可能感兴趣的:(OpenCV)