python - 使用 Python 和 Numpy 创建原始图像的图像 block (m*n)

标签 python image opencv numpy

我正在使用 numpy 从我的 16 位 tiff 图像 (13777*16004) 创建 (224*224) 的图 block 。我能够沿着行和列裁剪/切片成 224*224 的相等图 block 。我在尝试创建移动一半瓷砖大小的新瓷砖时遇到了问题......例如:我想要实现的粗略算法

(1:224, 1:224)

(1:224, 112:336)

( , 224:448)

目标是保留图 block 大小 (224*224),同时移动一半图 block 大小以获得更多图像图 block ...

为执行任务编写的代码片段

row_x =  img.shape[0]
column_y = img.shape[1]

tile_size_x = 224
tile_size_y = 224


range_x = mpz(ceil(row_x/tile_size_x))
range_y = mpz(ceil(column_y/tile_size_y))

for x in range(range_x, row_x):

    for y in range(range_y, column_y): 

        x0 = x * tile_size_x 

        x1 = int(x0/2) + tile_size_x

        y0 = y * tile_size_y 

        y1 = int(y0/2) + tile_size_y



        z = img[x0:x1, y0:y1]
        print (z.shape,z.dtype)

我总是得到错误的结果,有人能帮忙吗???

最佳答案

您在计算 for 循环的范围时出错了。要制作的切片数,必须使用两个切片之间的偏移量来计算,在您的情况下为 x0/2,我已经简化了您的代码并定义了一些有意义的变量,您可以配置这些变量以获得来自给定图像的所需图 block :

enter image description here

import cv2
import math

img = cv2.imread("/path/to/lena.png") # 512x512

img_shape = img.shape
tile_size = (256, 256)
offset = (256, 256)

for i in xrange(int(math.ceil(img_shape[0]/(offset[1] * 1.0)))):
    for j in xrange(int(math.ceil(img_shape[1]/(offset[0] * 1.0)))):
        cropped_img = img[offset[1]*i:min(offset[1]*i+tile_size[1], img_shape[0]), offset[0]*j:min(offset[0]*j+tile_size[0], img_shape[1])]
        # Debugging the tiles
        cv2.imwrite("debug_" + str(i) + "_" + str(j) + ".png", cropped_img)

如果图像尺寸是 512x512 的精确倍数,则作为当前偏移量,因此我们将得到 4 个相同尺寸的图 block :

enter image description here enter image description here enter image description here enter image description here

改变偏移量的值,会得到不规则大小的图 block ,如果偏移量不是图像尺寸的精确倍数,如果不需要,您可以稍后通过更改 math.ceil 来过滤这些图 block > 到 for 循环中的 math.floor

关于python - 使用 Python 和 Numpy 创建原始图像的图像 block (m*n),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45950124/

相关文章:

Python删除额外的特殊unicode字符

android - 如何将随机图像设置为 ImageView 的?

javascript - 在显示预加载器的同时预加载所有 CSS 图像

image - OpenCV VideoCapture读取图片序列耗时过多,每帧约40ms

c++ - opencv 从相机数据创建垫子

opencv - 在 Pillow/PIL中转换色彩空间

python - 使用 Python 进行合并排序

python - 几行说明:使用openCV在python中进行模板匹配

opencv - 如何应用不是 cv2.THRESH_BINARY 掩码的掩码来使用 python-opencv 覆盖原始图像?

python - 我可以使用 SocksiPy 在函数内更改 SOCKS 代理吗?