1. 程式人生 > 程式設計 >Python OpenCV中的numpy與影象型別轉換操作

Python OpenCV中的numpy與影象型別轉換操作

Python OpenCV儲存影象使用的是Numpy儲存,所以可以將Numpy當做影象型別操作,操作之前還需進行型別轉換,轉換到int8型別

import cv2
import numpy as np
# 使用numpy方式建立一個二維陣列
img = np.ones((100,100))
# 轉換成int8型別
img = np.int8(img)
# 顏色空間轉換,單通道轉換成多通道, 可選可不選
img = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
cv2.imwrite("demo.jpg",img)

補充知識:Python中讀取圖片並轉化為numpy.ndarray()資料的6種方式

方式:返回型別

OpenCV np.ndarray
PIL PIL.JpegImagePlugin.JpegImageFile
keras.preprocessing.image PIL.JpegImagePlugin.JpegImageFile
Skimage.io np.ndarray
matplotlib.pyplot np.ndarray
matplotlib.image np.ndarray

import numpy as np
import cv2
from keras.preprocessing.image import ImageDataGenerator,array_to_img,img_to_array,load_img
from PIL import Image
import skimage.io as io
import matplotlib.pyplot as plt
import matplotlib.image as mpig 
 
'''
方式:   返回型別
OpenCV   np.ndarray
PIL    PIL.JpegImagePlugin.JpegImageFile
keras.preprocessing.image PIL.JpegImagePlugin.JpegImageFile
Skimage.io   np.ndarray
matplotlib.pyplot  np.ndarray
matplotlib.image  np.ndarray
'''
 
imagePath="E:/DataSet/test1/trainSet/bus/300.jpg" 
 
'''
方式一:使用OpenCV
'''
img1=cv2.imread(imagePath)
print("img1:",img1.shape)
print("img1:",type(img1))
print("-"*10)
 
'''
方式二:使用PIL
'''
img2=Image.open(imagePath)
print("img2:",img2)
print("img2:",type(img2))
#轉換成np.ndarray格式
img2=np.array(img2)
print("img2:",img2.shape)
print("img2:",type(img2))
print("-"*10) 
 
'''
方式三:使用keras.preprocessing.image
'''
img3=load_img(imagePath)
print("img3:",img3)
print("img3:",type(img3))
#轉換成np.ndarray格式,使用np.array(),或者使用keras裡的img_to_array()
#使用np.array()
#img3=np.array(img2)
#使用keras裡的img_to_array()
img3=img_to_array(img3)
print("img3:",img3.shape)
print("img3:",type(img3))
print("-"*10) 
 
'''
方式四:使用Skimage.io
'''
img4=io.imread(imagePath)
print("img4:",img4.shape)
print("img4:",type(img4))
print("-"*10) 
 
'''
方式五:使用matplotlib.pyplot
'''
img5=plt.imread(imagePath)
print("img5:",img5.shape)
print("img5:",type(img5))
print("-"*10) 
 
'''
方式六:使用matplotlib.image
'''
img6=mpig.imread(imagePath)
print("img6:",img6.shape)
print("img6:",type(img6))
print("-"*10)

執行結果:

Using TensorFlow backend.
img1: (256,384,3)
img1: <class 'numpy.ndarray'>
----------
img2: <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=384x256 at 0x249608A8C50>
img2: <class 'PIL.JpegImagePlugin.JpegImageFile'>
img2: (256,3)
img2: <class 'numpy.ndarray'>
----------
img3: <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=384x256 at 0x2496B5A23C8>
img3: <class 'PIL.JpegImagePlugin.JpegImageFile'>
img3: (256,3)
img3: <class 'numpy.ndarray'>
----------
img4: (256,3)
img4: <class 'numpy.ndarray'>
----------
img5: (256,3)
img5: <class 'numpy.ndarray'>
----------
img6: (256,3)
img6: <class 'numpy.ndarray'>
----------

Python OpenCV中的numpy與影象型別轉換操作

以上這篇Python OpenCV中的numpy與影象型別轉換操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。