【Bug】当用opencv库的imread()函数读取图像,用matplotlib库的plt.imshow()函数显示图像时,图像色彩出现偏差问题的解决方法

一,问题描述

我们在利用opencv的imread读取本地图像,进行一系列处理,但是发现用matplotlib库的imshow()函数显示的时候出现色彩改变,比如图像偏黄偏红偏蓝等等,但是对图像的处理并没有对色彩进行过改变。比如下面图像读取显示后直接变为黄色调:

 代码如下:

# encoding:utf-8
import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号img_1 = cv2.imread('sp_noise.jpg')
img_2 = cv2.imread('medianBlur.jpg')
img_3 = cv2.imread('mean.jpg')
img_4 = cv2.imread('Gaussian.jpg')# 显示图形
titles = ['噪声图像', '中值滤波', '均值滤波 ', '高斯滤波']
images = [img_1, img_2, img_3, img_4]
for i in range(4):plt.subplot(2, 2, i + 1)plt.imshow(images[i])plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()

二,原因分析

这种色彩偏黄的问题通常是由于图像的颜色通道解释不正确引起的。在OpenCV中,cv2.imread默认读取图像为BGR颜色通道顺序,而Matplotlib中plt.imshow默认将颜色通道解释为RGB。因此,当你用cv2.imread读取图像并用plt.imshow显示时,颜色通道顺序不匹配,导致颜色显示不正确。

三,解决方法

为了解决这个问题,你可以在使用cv2.imread读取图像时,将其转换为RGB颜色通道顺序,或者在使用plt.imshow显示图像时,指定颜色通道的顺序。以下是两种解决方法:

1.在cv2.imread()读取图像后将图像转化为RGB通道

# 将BGR图像转换为RGB
img_1 = cv2.cvtColor(img_1, cv2.COLOR_BGR2RGB)
img_2 = cv2.cvtColor(img_2, cv2.COLOR_BGR2RGB)
img_3 = cv2.cvtColor(img_3, cv2.COLOR_BGR2RGB)
img_4 = cv2.cvtColor(img_4, cv2.COLOR_BGR2RGB)

2.在plt.imshow()图像后将其转换成BGR通道

plt.imshow(cv2.cvtColor(images[i], cv2.COLOR_BGR2RGB))

 四,完整代码

方法1:将图像转换为RGB颜色通道顺序

import cv2
import matplotlib.pyplot as pltimg_1 = cv2.imread('sp_noise.jpg')
img_2 = cv2.imread('medianBlur.jpg')
img_3 = cv2.imread('mean.jpg')
img_4 = cv2.imread('Gaussian.jpg')# 将BGR图像转换为RGB
img_1 = cv2.cvtColor(img_1, cv2.COLOR_BGR2RGB)
img_2 = cv2.cvtColor(img_2, cv2.COLOR_BGR2RGB)
img_3 = cv2.cvtColor(img_3, cv2.COLOR_BGR2RGB)
img_4 = cv2.cvtColor(img_4, cv2.COLOR_BGR2RGB)# 显示图形
titles = ['噪声图像', '中值滤波', '均值滤波', '高斯滤波']
images = [img_1, img_2, img_3, img_4]
for i in range(4):plt.subplot(2, 2, i + 1), plt.imshow(images[i])plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()

方法2:指定plt.imshow中的颜色通道顺序

import cv2
import matplotlib.pyplot as pltimg_1 = cv2.imread('sp_noise.jpg')
img_2 = cv2.imread('medianBlur.jpg')
img_3 = cv2.imread('mean.jpg')
img_4 = cv2.imread('Gaussian.jpg')# 显示图形,指定颜色通道顺序为BGR
titles = ['噪声图像', '中值滤波', '均值滤波', '高斯滤波']
images = [img_1, img_2, img_3, img_4]
for i in range(4):plt.subplot(2, 2, i + 1), plt.imshow(cv2.cvtColor(images[i], cv2.COLOR_BGR2RGB))plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()

 今日一笑:

范小勤:“我要开挖掘机”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/140139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年第十六届山东省职业院校技能大赛中职组“网络安全”赛项规程

第十六届山东省职业院校技能大赛 中职组“网络安全”赛项规程 一、赛项名称 赛项名称:网络安全 英文名称:Cyber Security 赛项组别:中职组 专业大类:电子与信息大类 二、竞赛目的 网络空间已经成为陆、海、空、天之后的第…

AI 时代的企业级安全合规策略

目录 漏洞分类管理的流程 安全策略管理 在扫描结果策略中定义细粒度的规则 有效考虑整个组织中的关键漏洞 确保职责分离 尝试组合拳 本文来源:about.gitlab.com 作者:Grant Hickman 在应用程序敏捷研发、敏捷交付的今天,让安全人员跟上…

神经网络(第二周)

一、简介 1.1 需求预测示例 1.1.1 逻辑回归算法 根据价格预测商品是否畅销。特征:T恤的价格;分类:销售量高1/销售量低0;使用逻辑回归算法进行分类,拟合效果如下图所示: 1.1.2 神经元和神经网络 将逻辑回…

Module build failed (from ./node_modules/postcss-loader/src/index.js):

出现该错误是你可能没认真看官网的安装配置,可直接看该目录3,一个字一个字看 先安装uview 如果选择v1版本,建议使用npm下载,下面以v1版本为例,使用的是npm下载,导入uview时该文件也在node_modules文件夹里…

Anolis 8.6 安装 Drawio

Anolis 8.6 安装 Drawio 22.1.0 一.RPM版(不建议)二.WAR 包部署 一.RPM版(不建议) Draw RPM 包下载链接 RPM 包直接基于Linux图形化能力部署,服务器类型的Linux系统启动RPM包安装的Draw可能比较复杂 系统版本 ## 1.…

(一)正点原子I.MX6ULL kernel6.1移植准备

一、概述 学完了正点原子的I.MX6ULL移植,正点原子的教程是基于Ubuntu18,使用的是4.1.15的内核,很多年前的了。NXP官方也发布了新的6.1的内核,以及2022.04的uboot。 本文分享一下基于Ubuntu22.04(6.2.0-36-generic&…

Unity中Shader的雾效

文章目录 前言一、Unity中的雾效在哪开启二、Unity中不同种类雾的区别1、线性雾2、指数雾1(推荐用这个,兼具效果和性能)3、指数雾2(效果更真实,性能消耗多) 三、在我们自己的Shader中实现判断,是…

【c++随笔12】继承

【c随笔12】继承 一、继承1、继承的概念2、3种继承方式3、父类和子类对象赋值转换4、继承中的作用域——隐藏5、继承与友元6、继承与静态成员 二、继承和子类默认成员函数1、子类构造函数 二、子类拷贝构造函数3、子类的赋值重载4、子类析构函数 三、单继承、多继承、菱形继承1…

设计模式-工厂方法

工厂方法是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。 问题 假设你开设了一个汽车工厂。创业初期工厂只能生产宝马这一款车,因此大部分代码都位于名为宝马的类中。 工厂效益非常好,为…

IDEA搭建ssm项目

此前,我一直在用eclipse编辑器做java项目,现在初次使用IDEA编辑器,在这里,我记录了使用IDEA环境下搭建ssm项目的过程。 创建Maven项目,如下 右击TEST4项目,在弹出的菜单中选择Add Framework Support 在弹出…

屏幕提词软件Presentation Prompter mac中文版使用方法

Presentation Prompter for mac是一款屏幕提词器软件,它可以将您的Mac电脑快速变成提词器,支持编写或导入,可以在一个或多个屏幕上平滑地滚动,Presentation Prompter 下载是为适用于现场表演者,新闻广播员,…

计算机网络——b站王道考研笔记

第一章 计算机网络体系结构 1.计算机网络概述 (1)概念 计算机网络是一个将分散的,具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统; 是互连的&#…

数据分析面试题1

1.右表为一组数据,尝试进行简单分析,并给出结论(使用公式和图表辅助) ①理解数据 userid:用户id神兽印记消耗数量 ②数据清洗 冻结首行,将列标题的英文字段转换成汉字字段检查是否有重复项:…

Leetcode—20.有效的括号【简单】

2023每日刷题&#xff08;二十七&#xff09; Leetcode—20.有效的括号 C实现代码 class Solution { public:bool isValid(string s) {stack<char> arr;int len s.size();if(len 1) {return false;}for(int i 0; i < len; i) {if(s[i] ( || s[i] [ || s[i] {)…

基于springboot实现沁园健身房预约管理系统【项目源码】计算机毕业设计

基于springboot实现沁园健身房预约管理系统演示 B/S架构 B/S结构是目前使用最多的结构模式&#xff0c;它可以使得系统的开发更加的简单&#xff0c;好操作&#xff0c;而且还可以对其进行维护。使用该结构时只需要在计算机中安装数据库&#xff0c;和一些很常用的浏览器就可以…

Flink

1. Flink简介 1.1 初识Flink Flink项目的理念是&#xff1a;“Apache Flink是为分布式、高性能、随时可用以及准确的流处理应用程序打造的开源的有状态的流处理框架”。 Apache Flink是一个框架和分布式处理引擎&#xff0c;用于对无界和有界数据流进行有状态计算。Fl…

进亦忧,退亦忧,Github Copilot 集成进入 Visual Studio 带来的思考

开篇想到《岳阳楼记》的结尾&#xff1a; 不以物喜&#xff0c;不以己悲&#xff1b;居庙堂之高则忧其民&#xff1b;处江湖之远则忧其君。是进亦忧&#xff0c;退亦忧。然则何时而乐耶&#xff1f;其必曰&#xff1a;“先天下之忧而忧&#xff0c;后天下之乐而乐”乎。未来30…

HarmonyOS 高级特性

引言 本章将探讨 HarmonyOS 的高级特性&#xff0c;包括分布式能力、安全机制和性能优化。这些特性可以帮助你构建更强大、更安全、更高效的应用。 目录 HarmonyOS 的分布式能力HarmonyOS 的安全机制HarmonyOS 的性能优化总结 1. HarmonyOS 的分布式能力 HarmonyOS 的分布…

Python 使用tkinter复刻Windows记事本UI和菜单功能(一)

下一篇&#xff1a;Python 使用tkinter复刻Windows记事本UI和菜单&#xff08;二&#xff09;-CSDN博客 介绍&#xff1a; Windows操作系统中自带了一款记事本应用程序&#xff0c;通常用于记录文字信息&#xff0c;具有简单文本编辑功能。Windows的记事本可以新建、打开、保…

html菜单的基本制作

前面写过一点网页菜单的博文&#xff1b;下面再复习一些技术要点&#xff1b; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.…