Скрипт Blender Python не позиционирует сетки прямо из изображения.Python

Программы на Python
Ответить
Anonymous
 Скрипт Blender Python не позиционирует сетки прямо из изображения.

Сообщение Anonymous »

Я пытаюсь использовать Blender для создания сеток областей из изображения BMP, что-то похожее на то, как Hearts of Iron IV обрабатывает провинции, но в Blender. Однако положение и размеры областей в изображении BMP не совпадают напрямую с выходными данными в Blender.
Ниже приведен сценарий, который я использую

Код: Выделить всё

import bpy
import csv
import numpy as np
from mathutils import Vector

IMAGE_FILE_PATH = r"path/to/Map.bmp"
CSV_FILE_PATH = r"path/to/Map.csv"

LIMIT = 10

def parse_csv(file_path):
color_to_province = {}
with open(file_path, "r") as file:
reader = csv.reader(file, delimiter=";")
for row in reader:
province_id = int(row[0])
rgb_color = (int(row[1]), int(row[2]), int(row[3]))
color_to_province[rgb_color] = province_id
return color_to_province

def load_image_as_array(image_file_path):
from bpy_extras.image_utils import load_image
image = load_image(image_file_path)
pixels = np.array(image.pixels).reshape(image.size[1], image.size[0], 4)
return (pixels[:, :, :3] * 255).astype(int), image.size

def create_provinces(image_file_path, csv_file_path, limit):
pixel_data, (width, height) = load_image_as_array(image_file_path)

color_to_province = parse_csv(csv_file_path)
processed_provinces = 0

for color, province_id in color_to_province.items():
if processed_provinces >= limit:
break

mask = np.all(pixel_data == color, axis=2)
coords = np.argwhere(mask)

if coords.size == 0:
continue

vertices = [Vector((x, -y, 0)) for y, x in coords]

mesh = bpy.data.meshes.new(f"Province_{province_id}")
obj = bpy.data.objects.new(f"Province_{province_id}", mesh)
bpy.context.collection.objects.link(obj)

mesh.from_pydata(vertices, [], [])
mesh.update()

bpy.context.view_layer.objects.active = obj
bpy.ops.object.mode_set(mode="EDIT")
bpy.ops.mesh.select_all(action="SELECT")
bpy.ops.mesh.convex_hull()
bpy.ops.object.mode_set(mode="OBJECT")

bpy.ops.object.modifier_add(type="DECIMATE")
obj.modifiers["Decimate"].ratio = 1
bpy.ops.object.modifier_apply(modifier="Decimate")

bpy.ops.object.shade_smooth()
processed_provinces += 1

create_provinces(IMAGE_FILE_PATH, CSV_FILE_PATH, LIMIT)`

Я пытаюсь заставить Blender генерировать сетки для областей, представленных в файле BMP, используя файл CSV для сопоставления цветов с конкретными провинциями.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -the-image
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»