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

本文主要是介绍四种方法完美解决plt.imshow显示cv2.imread读取的图像有色差发蓝的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

解决plt.imshow显示cv2.imread读取的图像有色差发蓝的问题(彩图发蓝、和灰度图发蓝)

  • 原图
  • 一、出现色差代码
    • 1.1 显示彩色图像出现色差
    • 1.2 显示灰度图像出现色差
  • 二、解释原因
    • 2.1 彩色图像出现色差原因
    • 2.2 灰度图像出现色差原因
  • 三、解决
    • 3.1 解决彩色图像出现色差问题
      • 3.1.1 方法1
      • 3.1.2 方法2
    • 3.2 解决灰度图像出现色差问题
      • 3.2.1 方法1
      • 3.2.2 方法2

原图

在这里插入图片描述

一、出现色差代码

1.1 显示彩色图像出现色差

import cv2
import numpy as np
import matplotlib.pyplot as pltimg = cv2.imread('dog.jpg')
plt.xticks([]), plt.yticks([]) 		#隐藏x轴和y轴plt.imshow(img)

运行结果:在这里插入图片描述

1.2 显示灰度图像出现色差

img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)plt.xticks([]), plt.yticks([]) # 隐藏x和y轴plt.imshow(img_gray)

运行结果:
在这里插入图片描述

二、解释原因

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、Bplt.xticks([]), plt.yticks([]) # 隐藏x和y轴plt.imshow(img_new1)

运行结果:
在这里插入图片描述

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)

运行结果:
在这里插入图片描述

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')

运行结果:
在这里插入图片描述

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读取的图像有色差发蓝的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/264560

相关文章

postgresql使用UUID函数的方法

《postgresql使用UUID函数的方法》本文给大家介绍postgresql使用UUID函数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录PostgreSQL有两种生成uuid的方法。可以先通过sql查看是否已安装扩展函数,和可以安装的扩展函数

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

SpringBoot整合Dubbo+ZK注册失败的坑及解决

《SpringBoot整合Dubbo+ZK注册失败的坑及解决》使用Dubbo框架时,需在公共pom添加依赖,启动类加@EnableDubbo,实现类用@DubboService替代@Service,配... 目录1.先看下公共的pom(maven创建的pom工程)2.启动类上加@EnableDubbo3.实

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

Nginx安全防护的多种方法

《Nginx安全防护的多种方法》在生产环境中,需要隐藏Nginx的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击,下面就来介绍一下Nginx安全防护的方法,感兴趣的可以了解一下... 目录核心安全配置1.编译安装 Nginx2.隐藏版本号3.限制危险请求方法4.请求限制(CC攻击防御)

nginx中端口无权限的问题解决

《nginx中端口无权限的问题解决》当Nginx日志报错bind()to80failed(13:Permissiondenied)时,这通常是由于权限不足导致Nginx无法绑定到80端口,下面就来... 目录一、问题原因分析二、解决方案1. 以 root 权限运行 Nginx(不推荐)2. 为 Nginx

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原