cv2、skimage读取和plt 显示图像需要注意的问题

1 cv2.imread()

1.1 cv2.imread()的使用

使用cv2.imread()函数读取图像。图像应该当前路径下,或者给出完整的图像路径。第二个参数是一个标识,它用来指定图像的读取方式。以下是官方文档的参数说明:

 

  • cv2.IMREAD_COLOR : Loads a color image. Any transparency of image will be neglected. It is the default flag.
  • cv2.IMREAD_GRAYSCALE : Loads image in grayscale mode
  • cv2.IMREAD_UNCHANGED : Loads image as such including alpha channel

它们分别对应的意思是:

 

  • cv2.IMREAD_COLOR : 默认使用该种标识。加载一张彩色图片,忽视它的透明度。
  • cv2.IMREAD_GRAYSCALE : 加载一张灰度图。
  • cv2.IMREAD_UNCHANGED : 加载图像,包括它的Alpha通道。     友情链接:Alpha通道的概念

提示:如果觉得以上标识太麻烦,可以简单的使用1,0,-1代替。(必须是整数类型)

import numpy as np
import cv2
 
# Load an color image in grayscale
# 使用灰度图方式加载一张彩色照片
img = cv2.imread('messi5.jpg',0)

警告:即使图像路径是错误的,它也不会抛出任何错误,但是返回的img会是None。

1.2 cv2.imread()的读取格式

cv2.imread()接口读图像,读进来直接是BGR 格式,数据格式在 0~255,通道格式为(W,H,C)

读出的图片格式是unit8;value是numpy array;图像数据是以BGR的格式进行存储的,注意是BGR,通道值默认范围0-255,需要将存储类型改成RGB的形式才能正常显示原图的颜色。

import cv2
import matplotlib.pyplot as plt
from skimage import transform 
import numpy as np
import skimage.io as io  
 
train_dir = 'C:\\Users\\Administrator\\代码TRY\\1.jpg'
 
'''以cv2方式读取图片'''
image=cv2.imread(train_dir)
# 将图像通道分离开。
b,g,r = cv2.split(image)
# 以RGB的形式重新组合。
rgb_image = cv2.merge([r,g,b])


# 也可以使用这个函数直接转换成RGB形式。
# image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
io.imshow(rgb_image)

2 skimage.io.imread

io.imread读出图片格式是uint8(unsigned int);value是numpy array;图像数据是以RGB的格式进行存储的,通道值默认范围0-255。

import cv2
import matplotlib.pyplot as plt
from skimage import transform 
import numpy as np
import skimage.io as io  
 
train_dir = 'C:\\Users\\Administrator\\代码TRY\\1.jpg'

'''以io.imread方式读取图片'''
# 以灰度读图并显示。
image = io.imread(train_dir,as_gray=True)
io.imshow(image)

3 显示图片注意的问题

用cv2.imread()和skimage.imread()读取的图片,使用cv2.imshow()和skimage.imshow()来显示。

尽量不要用plt.imshow()来显示cv2.imread()和skimage.imread()。

尤其是读取的图像为灰度图时,会发生显示的颜色与原图不一致。

from keras.preprocessing.image import ImageDataGenerator
import numpy as np
import os
import glob
import skimage.io as io
import skimage.transform as trans
import matplotlib.pyplot as plt
import cv2

img_arr1=io.imread("C:/Users/ZhangRR/Desktop/unet-master/data/membrane/train/image/0.png",as_gray=True)
img_arr2=cv2.imread("C:/Users/ZhangRR/Desktop/unet-master/data/membrane/train/image/0.png",cv2.IMREAD_GRAYSCALE)

print(img_arr1.shape)
print(img_arr2.shape)
io.imshow(img_arr1)
cv2.imshow("cv2.imshow()",img_arr2)




plt.figure()
plt.title("plt显示skimage.imread()")
plt.imshow(img_arr1)

plt.figure()
plt.title("plt显示cv2.imread()")
plt.imshow(img_arr2)
plt.show()

原图如下: 

 

(1)cv2.imshow()

 

(2)skimage.imshow()

 

(3)plt.imshow()显示cv2.imread()读取的图像

 

(4)plt.imshow()显示skimage.imread()读取的图像

 

 

4 skimage中一个界面显示多个图片 

from keras.preprocessing.image import ImageDataGenerator
import numpy as np
import os
import glob
import skimage.io as io
import skimage.transform as trans
import matplotlib.pyplot as plt
import cv2

img_arr1=io.imread("C:/Users/ZhangRR/Desktop/unet-master/data/membrane/train/image/0.png",as_gray=True)
img_arr2=cv2.imread("C:/Users/ZhangRR/Desktop/unet-master/data/membrane/train/image/0.png",cv2.IMREAD_GRAYSCALE)


hmerge = np.hstack((img_arr1, img_arr2)) #水平拼接
vmerge = np.vstack((img_arr1 , img_arr2)) #垂直拼接

cv2.imshow("test1",hmerge)
cv2.imshow("test2",vmerge)

'''
# 或者下免得方式
io.imshow("test1",hmerge)
io.imshow("test2",vmerge)
'''

运行效果:

(1)水平拼接 

(2)垂直拼接 

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值