Python 将图像拆分为任意数量的框
我需要将RGBA图像分割成任意数量的大小尽可能相等的框 我已尝试使用numpy.array_split,但不确定如何在保留RGBA通道的同时执行此操作 我看了下面的问题,没有一个详细说明如何将图像分割成n个框,它们涉及将图像分割成预定像素大小的框,或者如何将图像分割成某种形状 虽然从盒子大小和图像大小得到盒子的数量似乎是一个简单的数学问题,但我不确定如何做到这一点 在尝试根据像素盒大小确定盒数时,我使用了以下公式Python 将图像拆分为任意数量的框,python,image,numpy,opencv,image-processing,Python,Image,Numpy,Opencv,Image Processing,我需要将RGBA图像分割成任意数量的大小尽可能相等的框 我已尝试使用numpy.array_split,但不确定如何在保留RGBA通道的同时执行此操作 我看了下面的问题,没有一个详细说明如何将图像分割成n个框,它们涉及将图像分割成预定像素大小的框,或者如何将图像分割成某种形状 虽然从盒子大小和图像大小得到盒子的数量似乎是一个简单的数学问题,但我不确定如何做到这一点 在尝试根据像素盒大小确定盒数时,我使用了以下公式 num_boxes = (img_size[0]*img_size[1])/
num_boxes = (img_size[0]*img_size[1])/ (box_size_x * box_size_y)
但这并没有导致图像被正确分割
为了澄清,我希望能够输入一个大小为(a,b,4)的numpy数组和一些方框的图像,并以某种形式输出图像(首选np数组,但任何形式都可以)
我感谢任何帮助,即使你不能提供完整的方法,我也会感谢一些指导
我试过了
def split_image(image, n_boxes):
return numpy.array_split(image,n_boxes)
#doesn't work with colors
def split_image(image, n_boxes):
box_size = factor_int(n_boxes)
M = im.shape[0]//box_size[0]
N = im.shape[1]//box_size[1]
return [im[x:x+M,y:y+N] for x in range(0,im.shape[0],M) for y in range(0,im.shape[1],N)]
factor_int从返回尽可能接近正方形的整数。我仍然不确定输入的是图像和框的尺寸,还是图像和框的数量。我也不确定你的问题是决定在哪里切掉图像还是知道如何切掉一个4通道图像,但也许这里的一些东西会让你开始 我从这个RGBA图像开始-圆圈是透明的,不是白色的: 您可以更改
框
,但将其保留为4将获得以下4个输出图像:
[][]您是否可以编辑您的问题,以提供您尝试过的任何代码?1x1像素框大小相同,保证覆盖任何矩形图像。请说明您对箱子的实际限制。计算盒子尺寸是最困难的部分;用矩形坐标剪切子图像很简单。只需找到
a
和b
中较大的一个,然后除以N
@9000我不确定你所说的实际限制是什么意思,我只想将图像剪切成N个框(N:1)→ num_pixels)。@MarkSetchell这些“a”和“b”值是像素框的x和y大小吗?这是一个二维版本。columns=3 rows=4表示范围内的j(rows):表示范围内的i(columns):elem=ni[jw//columns:(j+1)*w//columns,ih//rows:]id=j*columns+i Image.fromarray(elem).save(f'img-{id}.png')抱歉上面的帖子我想在这里发表评论
#!/usr/bin/env python3
from PIL import Image
import numpy as np
import math
# Open image and get dimensions
im = Image.open('start.png').convert('RGBA')
# Make Numpy array from image and get height and width
ni = np.array(im)
h ,w = ni.shape[:2]
print(f'Height: {h}, width: {w}')
BOXES = 4
for i in range(BOXES):
this = ni[:, i*w//BOXES:(i+1)*w//BOXES, :]
Image.fromarray(this).save(f'box-{i}.png')