为何出现颜色反转?OpenCV高斯模糊代码运行颜色异常咨询
为什么OpenCV结合Matplotlib显示图像会出现颜色反转?
这个问题我之前也碰到过,核心原因是OpenCV和Matplotlib对图像通道的默认顺序处理不一样:
- OpenCV读取图像时,默认会把图像解码成BGR(蓝、绿、红)的通道顺序
- 而Matplotlib的
imshow()函数默认是按照RGB(红、绿、蓝)的通道顺序来渲染显示的
你直接把OpenCV处理后的BGR格式图像传给Matplotlib显示,自然会出现颜色反转——原本的红色区域会变成蓝色,蓝色区域变成红色,也就是你看到的现象。
修复方法有两种,任选其一即可:
方法一:用OpenCV自带的颜色空间转换函数转换通道顺序
import cv2 from matplotlib import pyplot as pl image = cv2.imread("Desert.jpg") blur = cv2.GaussianBlur(image,(95,95),5) # 将BGR格式转换为RGB格式 blur_rgb = cv2.cvtColor(blur, cv2.COLOR_BGR2RGB) cv2.imshow("desert", image) pl.imshow(blur_rgb) pl.xticks([]), pl.yticks([]) pl.show()
方法二:直接通过数组切片反转通道顺序(更简洁)
import cv2 from matplotlib import pyplot as pl image = cv2.imread("Desert.jpg") blur = cv2.GaussianBlur(image,(95,95),5) # 反转图像最后一维的通道顺序,实现BGR→RGB的转换 blur_rgb = blur[:, :, ::-1] cv2.imshow("desert", image) pl.imshow(blur_rgb) pl.xticks([]), pl.yticks([]) pl.show()
另外补充一句:你代码里用cv2.imshow显示原图是正常的,因为cv2.imshow本身就是按照BGR顺序渲染图像的,和OpenCV的读取逻辑完全匹配,所以不会出现颜色问题。
内容的提问来源于stack exchange,提问作者Parth
相关产品推荐
相关产品推荐

