IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> plt.imshow显示cv2读取的图像颜色不对的解决方案 -> 正文阅读

[人工智能]plt.imshow显示cv2读取的图像颜色不对的解决方案

plt.imshow显示cv2读取的图像颜色不对的解决方案

(plt.imshow与cv2.imshow显示同一图像颜色不一致)


原理

Opencv:

cv2.imread( ) 所读取的图像格式:每个像素为[B,G,R]的形式
cv2.imshow( ) 显示图像:按图像中每个像素为[B,G,R]的规则将图像显示出来

matplotlib:

mpimg.imread( ) 所读取的图像格式:每个像素为[R,G,B]的形式
plt.imshow( ) 显示图像:按图像中每个像素为[R,G,B]的规则将图像显示出来

示例

原图像

# 读取图像,单个像素为[B,G,R](cv2的图像是bgr,注意),三维向量(高,宽,3)
image = cv2.imread(r'D:\pythonProject_PlantSeedlingsClassification\0ace21089.png')

print(image.shape)
plt.imshow(image)
plt.show()

输出:

(1899, 1900, 3)
在这里插入图片描述

可以看到这时我们用 cv2.imread 读取了图像,但是用 plt.imshow 输出时颜色却不对了。
这个原因便是上面讲过的 cv2 和 plt 读取图像时每个像素的格式是不一样的,前者是[B,G,R],后者是[R,G,B]

解决方案

第一种方法(最简单直接)

使用对应的读取与显示图像方式:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

image = mpimg.imread(r'D:\pythonProject_PlantSeedlingsClassification\0ace21089.png')

print(image.shape)
plt.imshow(image) 
plt.show()

输出:

(1899, 1900, 3)
在这里插入图片描述

或者

import matplotlib.pyplot as plt
import cv2

# 读取图像,单个像素为[B,G,R](cv2的图像是bgr,注意),三维向量(高,宽,3)
image = cv2.imread(r'D:\pythonProject_PlantSeedlingsClassification\0ace21089.png')

cv2.imshow('img',image)
cv2.waitKey(0)

输出:
在这里插入图片描述

第二种方法

如果坚持用 cv2.imread 读取图像,plt.imshow 显示图像:

利用原理来解决!

cv2 读取的是 [B,G,R] ,那么把它转化成顺序为 [R,G,B] 的格式不就可以用plt.imshow显示成正确的颜色嘛

import matplotlib.pyplot as plt
import cv2
import numpy as np

# 读取图像,单个像素为[B,G,R](cv2的图像是bgr,注意),三维向量(高,宽,3)
image = cv2.imread(r'D:\pythonProject_PlantSeedlingsClassification\0ace21089.png')


# 将[B,G,R]转为[R,G,B]
img_rgb = np.zeros(shape=image.shape, dtype=np.int32)
img_rgb[:,:,0], img_rgb[:,:,1], img_rgb[:,:,2] = np.copy(image[:,:,2]), np.copy(image[:,:,1]), np.copy(image[:,:,0])

print(img.shape)
print(image_gray.shape)
plt.figure()
fig, axes = plt.subplots(1, 2, figsize=(20, 20))
axes[0].imshow(image)  # 直接显示bgr格式的 image
axes[1].imshow(img_rgb)  # 显示顺序格式为rgb的图像
plt.show()

输出:

(1899, 1900, 3)
(1899, 1900)
在这里插入图片描述

第三种方法

如果坚持用 cv2.imread 读取图像,plt.imshow 显示图像,且显示的图像是灰度图(彩色图是无法解决的),可以用下面两种方式:

import matplotlib.pyplot as plt
import cv2

# 读取图像,单个像素为[B,G,R](cv2的图像是bgr,注意),三维向量(高,宽,3)
image = cv2.imread(r'D:\pythonProject_PlantSeedlingsClassification\0ace21089.png')
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

print(image.shape)
print(image_gray.shape)
plt.figure()
fig, axes = plt.subplots(1, 2, figsize=(20, 20))
axes[0].imshow(image_gray)  # 直接显示 image_gray
axes[1].imshow(image_gray, cmap='gray')  # 显示正确颜色的方法
plt.show()

输出:

(1899, 1900, 3)
(1899, 1900)
在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 11:04:02  更:2021-12-10 11:04:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 1:32:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码