# 怎么用Python將圖像轉換為樂高積木風格圖片
將普通照片轉換為樂高積木風格的圖像是一個有趣的計算機視覺項目,結合了像素化、顏色量化和圖像處理技術。本文將介紹如何使用Python和OpenCV庫實現這一效果。
## 實現原理
樂高積木風格圖像的核心特征包括:
1. **大塊像素化**:模擬樂高積木的塊狀結構
2. **有限顏色 palette**:使用樂高積木的標準顏色
3. **突出邊緣**:模擬積木塊之間的縫隙
## 準備工作
首先安裝必要的庫:
```bash
pip install opencv-python numpy matplotlib
import cv2
import numpy as np
from matplotlib import pyplot as plt
def load_image(image_path):
img = cv2.imread(image_path)
return cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 轉換為RGB格式
LEGO_COLORS = [
[0,0,0], # 黑色
[255,255,255], # 白色
[255,0,0], # 紅色
[0,255,0], # 綠色
[0,0,255], # 藍色
[255,255,0], # 黃色
# 可以添加更多樂高標準顏色...
]
def quantize_colors(img, palette):
# 計算每個像素與調色板顏色的距離
distances = np.linalg.norm(img[:,:,None] - palette, axis=3)
# 找到最接近的顏色索引
closest = np.argmin(distances, axis=2)
# 用調色板顏色替換原顏色
return np.array(palette)[closest].astype(np.uint8)
def pixelate(img, block_size=10):
h, w = img.shape[:2]
# 調整尺寸使能被block_size整除
h_new = h - (h % block_size)
w_new = w - (w % block_size)
img = img[:h_new, :w_new]
# 分塊計算平均顏色
blocks = img.reshape(h_new//block_size, block_size,
w_new//block_size, block_size, 3)
return blocks.mean(axis=(1,3)).astype(np.uint8)
def add_grid_lines(img, block_size, line_color=[50,50,50], line_width=1):
h, w = img.shape[:2]
# 創建空白圖像
result = np.zeros((h*(block_size+line_width),
w*(block_size+line_width), 3), dtype=np.uint8)
for i in range(h):
for j in range(w):
# 填充顏色塊
y_start = i*(block_size+line_width)
x_start = j*(block_size+line_width)
result[y_start:y_start+block_size,
x_start:x_start+block_size] = img[i,j]
return result
def lego_style(image_path, output_size=500, block_size=10):
# 加載并調整圖像大小
img = load_image(image_path)
scale = output_size / max(img.shape[:2])
img = cv2.resize(img, None, fx=scale, fy=scale)
# 處理流程
pixelated = pixelate(img, block_size)
quantized = quantize_colors(pixelated, LEGO_COLORS)
final_img = add_grid_lines(quantized, block_size)
return final_img
if __name__ == "__main__":
result = lego_style("input.jpg", block_size=15)
plt.imshow(result)
plt.axis('off')
plt.savefig("lego_style_output.jpg", bbox_inches='tight', dpi=300)
plt.show()
要實現更專業的效果,可以考慮: - 支持透明度處理 - 添加積木高度信息(不同顏色對應不同高度) - 生成可供3D打印的積木組合方案
通過調整block_size參數,你可以控制最終圖像的”顆粒感”程度。較小的值會產生更精細但計算量更大的結果,而較大的值會產生更明顯的積木塊效果。
這個項目展示了如何將簡單的圖像處理技術組合起來創造有趣的效果,是學習計算機視覺的良好起點。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。