图像数据处理
程序员文章站
2024-03-04 16:36:59
...
读入、显示图像与保存图像
1、用cv2.imshow显示
import cv2
img=cv2.imread('lena.jpg',cv2.IMREAD_COLOR)
cv2.namedWindow('lena',cv2.WINDOW_AUTOSIZE)
cv2.imshow('lena',img)
k=cv2.waitKey(0)
if k==27:
cv2.destroyAllWindows()
plt.close()
elif k==ord('s'):
cv2.imwrite('lenagray.png',img)
cv2.destroyAllWindows()
2、用PIL读取
from PIL import Image
im = Image.open("bride.jpg")
im.rotate(45).show()
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open('d:/lena.jpg')) #打开图像并转化为数字矩阵
plt.figure("dog")
plt.imshow(img)
plt.axis('off')
plt.show()
显示灰度图
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img = Image.open('lena.jpg')
img = np.array(img)
if img.ndim == 3:
img = img[:,:,0]
plt.subplot(221); plt.imshow(img)
plt.subplot(222); plt.imshow(img, cmap ='gray')
plt.subplot(223); plt.imshow(img, cmap = plt.cm.gray)
plt.subplot(224); plt.imshow(img, cmap = plt.cm.gray_r)
plt.show()
3、io.imread
from skimage import io
img=io.imread('d:/dog.jpg',as_grey=True)
io.imshow(img)
4、用cv2.imread读取,用plt.imshow显示
import cv2
from matplotlib import pyplot as plt
img=cv2.imread('lena.jpg',cv2.IMREAD_COLOR)
plt.imshow(img)
plt.show()
用cv2读取用plt显示图片的方法会导致图像色彩偏蓝
对于opencv的像素是BGR顺序,然而matplotlib所遵循的是RGB顺序。
opencv的一个像素为:[B,G,R] ,matplotlib的一个像素为:[R,G,B]。这就是为什么本来发红的区域变得有些发蓝了。
解决方法:
import numpy as np
import cv2
from matplotlib import pyplot as plt
img=cv2.imread('lena.jpg',cv2.IMREAD_COLOR)
#method1
b,g,r=cv2.split(img)
img2=cv2.merge([r,g,b])
plt.imshow(img2)
plt.show()
#method2
img3=img[:,:,::-1]
plt.imshow(img3)
plt.show()
#method3
img4=cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img4)
plt.show()
推荐阅读