python有各種組件的加持,功能強大,操作圖片比較方便快捷,代碼也比較簡潔
整理下常用的操作,以後備用
一、圖片創建
方法一
import numpy as np
import cv2
...
# 創建空圖片
img = np.zeros((imgHeight, imgWidth, 3), np.uint8)
# 根據矢量數據填充顏色
area = np.array(regionXY)
cv2.fillPoly(img, [area], (255, 255, 255))
cv2.imwrite(path, img)
方法二
from PIL import Image
...
image = Image.new(mode='RGBA', size=(imgWidth, imgHeight))
for x in range(imgWidth-1):
for y in range(imgHeight-1):
pixdata[x,y] = (255,255,255,255)
image.save(imgPath)
二、圖片讀寫
from PIL import Image
...
img = Image.open(imgPath) #讀入
size = img.size()
pixdata = img.load()
pixdata[0,0] = (255,255,255,255) #修改顏色
img.save(imgPath)
三、圖片裁剪
根據規則提取像素
- 定義提取規則,比如某某顏色、符合某數據函數的像素、距離判斷、圖形關係等
- 偏離每個像素,修改或另存
規則矩形裁剪
from PIL import Image
...
img = Image.open(imgPath)
box = (left, upper, right, lower) #裁剪範圍
region = img.crop(box)
region.save(regionPath)
不規則多邊形
實際項目中會有用不規則多邊形裁剪圖像,比如某行政區劃、某物品輪廓等
如果遍歷像素判斷與矢量圖形的關係,執行效率會非常慢,
- 將用
turtle
或cv2
掩膜矢量數據轉爲柵格數據,比如jpg\png, - 確定目標圖片和掩膜像素的對應關係
- 遍歷目標圖片像素操作