Tạo bản đồ thủ tục python

Nếu tôi có 1 ether cho mỗi hình ảnh pixel được tạo theo thủ tục mà tôi đã xem trong 12 tháng qua, tôi nghĩ rằng tôi sẽ có đủ cho một nửa con vượn buồn chán

Trong hướng dẫn này, chúng ta sẽ tạo các mảnh pixel được tạo theo thủ tục của riêng mình. Trước khi đến đó, chúng ta cần hiểu chính xác hình ảnh là gì đối với máy tính và cách chúng ta có thể sửa đổi chúng. Những gì chúng tôi trình bày sẽ tạo nền tảng để bạn tạo hình ảnh được tạo ngẫu nhiên của riêng mình, tạo bộ sưu tập NFT và trở thành triệu phú tiền điện tử chỉ sau một đêm

Chúng ta sẽ bắt đầu với một bức ảnh và tìm hiểu đằng sau bức ảnh đó là gì, trước khi chỉnh sửa nó theo cách thủ công. Sau đó, chúng tôi sẽ bắt đầu lại từ đầu với một khung vẽ mới và tạo các cầu thủ bóng đá nghệ thuật pixel với màu sắc trang phục ngẫu nhiên

Bạn có thể tìm thấy toàn bộ sổ ghi chép và tài sản cho bài viết này tại đây

Đang tải một hình ảnh và nhìn dưới mui xe

Trước tiên, hãy nhập các gói của chúng tôi

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

Thư viện PIL cho phép chúng tôi dễ dàng tải, lưu và chỉnh sửa hình ảnh. Chúng ta có thể dễ dàng tải một hình ảnh trong cùng thư mục với mã của mình bằng Hình ảnh. mở, sau đó hiển thị nó bằng hàm imshow của matplotlib

image = Image.open['img.jpeg']
plt.imshow[image]

Như bạn có thể biết, matplotlib là một thư viện dữ liệu viz. Vì vậy, làm thế nào là nó có thể hiển thị hình ảnh?. Tất cả một hình ảnh là một bảng tính các con số. Hãy coi mỗi pixel là một ô duy nhất, mỗi pixel chứa thông tin về màu sắc mà nó sẽ hiển thị. Hãy cùng xem dữ liệu của hình ảnh này – nó có hình dạng gì và ví dụ về một ô là gì?

#Convert image to an array and check out the shape
imageArray = np.asarray[image]
imageArray.shape
#[1618, 3143, 3]

Kích thước có ba số, vì vậy nó là một mảng 3d. Hãy nghĩ về nó giống như một bảng tính, với mỗi ô có nhiều số. Những danh sách nhiều số trong một bảng có nghĩa là nó là 3d. Tế bào đầu tiên trông như thế nào?

#View the first cell in the first array
#It is a list of 3 values - an RGB colour!
imageArray[0,0]
#array[[119, 131, 145], dtype=uint8]

Ô là một mảng gồm ba giá trị. Ba giá trị đại diện cho màu của pixel trong ảnh với giá trị RGB. RGB là sự kết hợp của một màu đỏ, lục và lam, với mỗi màu đi từ 0 [không có màu nào] đến 255 [tải màu đó]. Kiểm tra bộ chọn màu của Google để xem cách các giá trị RGB tạo ra bất kỳ màu nào

Bây giờ chúng ta có thể thấy rằng hình ảnh chỉ đơn giản được tạo thành từ các mảng và danh sách, đây chỉ là dữ liệu giống như bất kỳ thứ gì khác mà chúng ta phân tích. Chúng ta có thể chọn các phần cụ thể của mảng và hiển thị chúng bằng cách cắt mảng trong ngoặc vuông

#Plot a subsection of the array
#This selection is everything on the y axis, but a selection of the x axis
plt.imshow[imageArray[:,1150:2000,]]

Hoặc thậm chí chúng ta có thể thay đổi các số trong mảng và sau đó thay đổi hình ảnh

#Create a copy of the image
#Change the subsection of the array to [0,0,0] - black in RGB
imageArrayCopy = imageArray.copy[]
imageArrayCopy[:,1150:2000] = [0,0,0]
plt.imshow[imageArrayCopy]

Có hàng triệu việc khác mà bạn có thể làm với dữ liệu hình ảnh. Chỉnh sửa và phân tích những con số này là cách bộ lọc Snapchat được tạo ra, là xương sống của thị giác máy tính, v.v. Nhưng chúng ta sẽ làm điều gì đó ít ấn tượng hơn… tạo pixel art 😎

Tạo hình ảnh của riêng chúng ta

Chúng tôi đã thấy một mảng hình ảnh được tạo từ một bức ảnh, nhưng chúng tôi có thể dễ dàng tạo mảng của riêng mình. Hãy sử dụng numpy để tạo một cái có tất cả các số không. 0, 0, 0 có màu đen trong RGB, không có màu, vì vậy chúng tôi mong đợi một hình ảnh màu đen…

#Create a new 3d array, filled with zeros
#The image is only 40 pixels y, 23 pixels x
playerImage = np.zeros[[40,23,3], dtype=np.uint8]
plt.imshow[playerImage]

Giống như trước đây, chúng ta có thể thay đổi giá trị pixel bằng cách thay đổi giá trị trong mảng này

#Set a background colour and overwrite all values in the 3d array
bg = [60,179,113]

for i in range[0,40]:
    for j in range[0,23]:
        playerImage[i,j] = bg

plt.imshow[playerImage]

Hình ảnh của chúng tôi nhỏ hơn rất nhiều so với ảnh đầu tiên, vì vậy các thay đổi đối với các pixel riêng lẻ sẽ nổi bật hơn nhiều. Điều này cung cấp cho chúng tôi một khung vẽ cho nghệ thuật pixel cơ bản. Một hình chữ nhật đơn giản cho chúng ta đường viền của một chiếc áo sơ mi

________số 8

… mà rõ ràng là cần phải cắt bỏ cánh tay…

#Plot the arm and shoulder gaps with the background colour

#Arm gaps
for i in range[19,25]:
    playerImage[i][6] = bg

for i in range[19,25]:
    playerImage[i][16] = bg
    

#Shoulder gaps

shoulders = [[14,4],[14,5],[14,6],
        [15,4],[15,5],
        [16,4],
        [14,16],[14,17],[14,18],
        [15,17],[15,18],
        [16,18]]

for each in shoulders:
    playerImage[each[0],[each[1]]] = bg

plt.imshow[playerImage]

…tương tự cho quần đùi…

image = Image.open['img.jpeg']
plt.imshow[image]
0

Phần mã còn lại để tạo hình này nằm trong sổ ghi chép, nhưng chúng ta có thể nhanh chóng tạo hình đơn giản bên dưới

Tạo các phiên bản tổng quát của những thứ này giờ đây thật dễ dàng với một loạt câu lệnh if và số ngẫu nhiên. Ví dụ rõ ràng nhất là thay đổi màu sắc bộ dụng cụ. Màu sắc ngẫu nhiên vui nhộn và đơn giản. Hãy nhớ làm thế nào màu sắc chỉ là ba con số?

image = Image.open['img.jpeg']
plt.imshow[image]
1

Và nếu chúng tôi bọc mã tạo hình ảnh của mình trong một hàm [như được hiển thị trong sổ ghi chép] và sử dụng trình tạo màu làm đối số cho bộ công cụ, thì bạn có các trình phát được tạo ngẫu nhiên

image = Image.open['img.jpeg']
plt.imshow[image]
2

Điều này rõ ràng là rất cơ bản, nhưng hiện tại chúng tôi chỉ bị giới hạn bởi các tùy chỉnh mà chúng tôi có thể nghĩ ra và gán cho các pixel. Chúng ta có thể dễ dàng sử dụng các lựa chọn ngẫu nhiên để chọn các kiểu dáng trang phục khác nhau, kiểu tóc, màu giày, chiều dài tay áo, hình xăm, v.v. Dưới đây là 1.000 ví dụ với một vài lựa chọn ngẫu nhiên khác được thêm vào logic sáng tạo của chúng tôi

Trong phần này, chúng tôi đã xem xét để hiểu rằng tất cả hình ảnh là một mảng 3d của các giá trị RGB. Như vậy, chúng ta có thể sử dụng các kỹ năng chỉnh sửa và cắt mảng của mình để thay đổi hình ảnh hoặc thậm chí tạo hình ảnh mới. Bằng cách kết hợp điều này với một số thiết kế và tạo số ngẫu nhiên, chúng tôi đã có thể tạo các hình ảnh nghệ thuật pixel được tạo theo thủ tục. Những khái niệm này đóng vai trò là phần giới thiệu siêu cơ bản cho các phần của thao tác hình ảnh, thị giác máy tính, nghệ thuật tạo hình và nhiều lĩnh vực khác, mỗi lĩnh vực đều có một lượng lớn công việc trên Twitter và các nơi khác. Hy vọng rằng chúng tôi đã thu hút được một số người quan tâm để tìm hiểu thêm, vì vậy hãy liên hệ nếu bạn muốn một số đề xuất

Hãy cho chúng tôi biết bạn có thể tạo ra những gì với những ý tưởng này trên @FC_Python. Mong được nhìn thấy những gì bạn nghĩ ra

Chủ Đề