1. 程式人生 > >Python對影象的基本操作

Python對影象的基本操作

(1)cv2方式

# -*- coding: utf-8 -*-
"""
Created on Thu Nov 29 14:19:53 2018

@author: cz
"""

from PIL import Image
import cv2
import matplotlib.pyplot as plt
import numpy as np

# 開啟
im = cv2.imread("test.png") # BGR

# 尺寸
size = im.shape

# 二值化畫素操作
for i in range(size[0]):
    for j in range(size[1]):
        if(sum(im[i,j]) > 50):
           im[i,j] = (255,255,255)
           
# 儲存
cv2.imwrite("save.png",im)

# 顯示
cv2.imshow("Image",im)
cv2.waitKey(0)

(2)PIL方式

# -*- coding: utf-8 -*-
"""
Created on Thu Nov 29 14:19:53 2018

@author: Administrator
"""

from PIL import Image
import cv2
import matplotlib.pyplot as plt
import numpy as np

# 開啟
im = Image.open("test.png")

# 轉換為numpy格式
im = np.array(im)
# 尺寸
size = im.shape

# 二值化畫素操作
for i in range(size[0]):
    for j in range(size[1]):
        if(sum(im[i,j]) > 50):
           im[i,j] = (255,255,255)

# 轉換為PIL格式
im = Image.fromarray(im)

# 儲存
im.save("save.png")

# 顯示
im.show()

也可以統一使用plt進行顯示,不管是plt還是cv2.imshow,在python中只認numpy.array,但是由於cv2.imread 的圖片是BGR,cv2.imshow 時相應的換通道顯示

# -*- coding: utf-8 -*-
"""
Created on Thu Nov 29 14:19:53 2018

@author: Administrator
"""

from PIL import Image
import cv2
import matplotlib.pyplot as plt
import numpy as np

# 開啟
im = Image.open("test.png")

# 轉換為numpy格式
im = np.array(im)
# 尺寸
size = im.shape

# 二值化畫素操作
for i in range(size[0]):
    for j in range(size[1]):
        if(sum(im[i,j]) > 50):
           im[i,j] = (255,255,255)

# 轉換為PIL格式
img = Image.fromarray(im)

# 儲存
img.save("save.png")

# 顯示
plt.imshow(im)
plt.show()


(3)skimage方式

# -*- coding: utf-8 -*-
"""
Created on Thu Nov 29 14:19:53 2018

@author: Administrator
"""

from PIL import Image
import cv2
import matplotlib.pyplot as plt
import numpy as np
from skimage import io

# 開啟
im = io.imread("test.png")

# 尺寸
size = im.shape

# 二值化畫素操作
for i in range(size[0]):
    for j in range(size[1]):
        if(sum(im[i,j]) > 50):
           im[i,j] = (255,255,255)

# 儲存
io.imsave('save.png',im)

# 顯示
io.imshow(im)