脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 解决plt.imshow显示cv2.imread读取的图像有色差发蓝的四种方法问题

解决plt.imshow显示cv2.imread读取的图像有色差发蓝的四种方法问题

2022-12-02 12:10善良995 Python

本文主要介绍了解决plt.imshow显示cv2.imread读取的图像有色差发蓝的四种方法问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

原图

解决plt.imshow显示cv2.imread读取的图像有色差发蓝的四种方法问题

 

一、出现色差代码

1.1 显示彩色图像出现色差

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

img = cv2.imread('dog.jpg')
plt.xticks([]), plt.yticks([]) 		#隐藏x轴和y轴

plt.imshow(img)

运行结果:

解决plt.imshow显示cv2.imread读取的图像有色差发蓝的四种方法问题

1.2 显示灰度图像出现色差

img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

plt.xticks([]), plt.yticks([]) # 隐藏x和y轴

plt.imshow(img_gray)

运行结果:

解决plt.imshow显示cv2.imread读取的图像有色差发蓝的四种方法问题

 

二、解释原因

2.1 彩色图像出现色差原因

使用cv2.imread()读取图像时,默认彩色图像的三通道顺序为B、G、R,这与我们所熟知的RGB中的R通道和B通道正好互换位置了。
而使用plt.imshow()函数却默认显示图像的通道顺序为R、G、B,导致图像出现色差发蓝。

2.2 灰度图像出现色差原因

那么为什么plt.imshow()显示灰度图(只有一个通道)还会出现色差呢?
上一段讲过,这是因为plt.imshow()函数默认显示三通道图像,把灰度图当作彩色图显示出来了,所以出现了发蓝的现象。

 

三、解决

3.1 解决彩色图像出现色差问题

3.1.1 方法1

img = cv2.imread('dog.jpg')		#读取通道顺序为B、G、R
b,g,r = cv2.split(img)			#分别提取B、G、R通道
img_new1 = cv2.merge([r,g,b])	#重新组合为R、G、B

plt.xticks([]), plt.yticks([]) # 隐藏x和y轴

plt.imshow(img_new1)

运行结果:

解决plt.imshow显示cv2.imread读取的图像有色差发蓝的四种方法问题

3.1.2 方法2

img = cv2.imread('dog.jpg')		#读取通道顺序为B、G、R
#img[:,:,0]表示图片的蓝色通道,对一个字符串s进行翻转用的是s[::-1],同样img[:,:,::-1]就表示BGR通道翻转,变成RGB
img_new2 = img[:, :, ::-1]

plt.xticks([]), plt.yticks([]) # 隐藏x和y轴

plt.imshow(img_new2)

运行结果:

解决plt.imshow显示cv2.imread读取的图像有色差发蓝的四种方法问题

3.2 解决灰度图像出现色差问题

3.2.1 方法1

img = cv2.imread('dog.jpg')
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)		#转换为灰度图

plt.xticks([]), plt.yticks([]) # 隐藏x和y轴

plt.imshow(img_gray,cmap='gray')

运行结果:

解决plt.imshow显示cv2.imread读取的图像有色差发蓝的四种方法问题

3.2.2 方法2

#cv2.imread()第二参数为0,直接将彩色图像转换为灰度图像
img = cv2.imread('dog.jpg',0)	

plt.xticks([]), plt.yticks([]) # 隐藏x和y轴

plt.imshow(img_gray,cmap='gray')

运行结果:

解决plt.imshow显示cv2.imread读取的图像有色差发蓝的四种方法问题

到此这篇关于解决plt.imshow显示cv2.imread读取的图像有色差发蓝的四种方法问题的文章就介绍到这了,更多相关plt.imshow显示cv2.imread读取内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_45954454/article/details/114707888

延伸 · 阅读

精彩推荐
  • Pythonpython实现PDF中表格转化为Excel的方法

    python实现PDF中表格转化为Excel的方法

    这篇文章主要为大家详细介绍了python实现PDF中表格转化为Excel的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一...

    ziyin_201322052020-06-17
  • Pythonpython基础之递归函数

    python基础之递归函数

    这篇文章主要介绍了python递归函数,实例分析了Python中返回一个返回值与多个返回值的方法,需要的朋友可以参考下...

    qianqqqq_lu4072022-02-16
  • Pythondjango实现同一个ip十分钟内只能注册一次的实例

    django实现同一个ip十分钟内只能注册一次的实例

    下面小编就为大家带来一篇django实现同一个ip十分钟内只能注册一次的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过...

    北漂的雷子2432020-12-15
  • Pythonpython 基于PYMYSQL使用MYSQL数据库

    python 基于PYMYSQL使用MYSQL数据库

    这篇文章主要介绍了python 基于PYMYSQL使用MYSQL数据库的方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下...

    测试-安静9272021-08-18
  • Python使用python爬取微博数据打造一颗“心”

    使用python爬取微博数据打造一颗“心”

    这篇文章主要介绍了使用python基于微博数据打造一颗“心”,作为程序员,我准备了一份特别的礼物,用以往发的微博数据打造一颗“爱心”,我想她一定会...

    FOOFISH-PYTHON之禅4322021-07-26
  • Python8个实用的Python程序你知道几个

    8个实用的Python程序你知道几个

    这篇文章主要为大家详细介绍了8个实用的Python程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你...

    赵卓不凡5952022-09-25
  • Pythonpython opencv设置摄像头分辨率以及各个参数的方法

    python opencv设置摄像头分辨率以及各个参数的方法

    下面小编就为大家分享一篇python opencv设置摄像头分辨率以及各个参数的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    qq_3107764919152021-01-26
  • Pythonpython自动生成证件号的方法示例

    python自动生成证件号的方法示例

    这篇文章主要给大家介绍了关于python自动生成证件号的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需...

    书院小先生7322021-08-25