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

2023-11-23

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

(1:224, 1:224)

(1:224、112:336)

(, 224:448)

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

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

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对于您的情况,我简化了您的代码并定义了一些有意义的变量,您可以配置这些变量以从给定图像获取所需的图块:

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 个相同大小的图块:

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

更改偏移量的值,会得到不规则尺寸的图块,如果偏移量不是图像尺寸的精确倍数,如果不需要,您可以稍后通过更改来过滤这些图块math.ceil to math.floor in the for loop.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python 和 Numpy 创建原始图像的图像图块 (m*n) 的相关文章

随机推荐

  • ASP.NET Core Identity 模拟特定用户

    假设我有以下角色 Admin User 我希望管理员角色用用户角色模拟特定用户帐户 但不知道该特定用户帐户的密码 管理员应该能够模拟应用程序中的任何用户 并能够以用户本人的身份浏览应用程序 我找到了一个链接这实际上是在 ASP NET MV
  • 使用 javascript 复制到剪贴板以获取phonegap

    我正在为phonegap 平台使用javascript mobile jquery 接口开发一个应用程序 现在我在网上看到了很多尝试复制到剪贴板的例子 不幸的是它们都不适合我 我对浏览器中的功能不感兴趣 只要它在通过电话间隙转换后能够工作
  • 尝试使用网络摄像头 python opencv 捕获视频时 gstreamer 出现严重错误

    我正在尝试使用 opencv 和 python 通过简单的代码通过网络摄像头拍摄视频 import numpy as np import cv2 cap cv2 VideoCapture 0 print cap isOpened if ca
  • 在 React-Chartjs-2 框的圆环图中添加文本以做出反应

    我创建了一个圆环图 它可以正常工作 但现在我需要在其中心显示数字 45 例如 我应该在哪里指定要显示的文本和坐标 在图表的选项中 我正在使用反应组件 class DoughnutChart extends React Component r
  • OS X 卸载已安装的 distutils 项目

    我在 El Capitan 上 我想用 pip 安装 numpy 但是我收到以下错误 Detected a distutils installed project numpy which we cannot uninstall The me
  • 如何将 :since 与 CompUnit 一起使用

    我试图通过使用 CompUnit 类集预编译 POD6 来创建 POD6 缓存 我可以创建 存储和检索 pod 如下所示 use v6 c use nqp my precomp store CompUnit PrecompilationSt
  • wpf listview拖动选择多个项目

    只是想知道是否有人知道如何做到这一点 我想让用户通过单击并拖动鼠标来选择多个项目 不松开单击 假设用户单击第 1 项 然后向下拖动到第 10 项 项目 1 到 10 应该被选中 就像他单击项目 1 然后按住 Shift 键并单击项目 10
  • 如何快速更改颜色字典中图像中的像素?

    我有一个图像 我想从颜色图中更改图像中的所有颜色 例如 10 20 212 60 40 112 目前 我正在读取图像 OpenCV 然后迭代图像数组并更改每个像素 但这非常慢 有什么办法可以让我做得更快吗 我对这个问题提供两个答案 这个答案
  • PHP获取真实IP(代理检测)

    我确实可以跟踪用户的 真实 IP 如果他有一个发送真实 IP 标头的代理 是否有更好的解决方案 甚至更多标头 由于这个函数在脚本中经常使用 所以它必须非常快 而且它似乎不在那个星座中 我提出了一些建议 但无法实现 将标头按最 野外 使用的顺
  • Python re:在变量中存储多个匹配项

    我想匹配字符串的不同部分并将它们存储在单独的变量中以供以后使用 例如 string bunch oranges bananas apples rxp a z var1 var2 var3 这样我就有了 var1 oranges var2 b
  • Ruby:时间的平均数组

    我的方法中有以下方法Array class class Array def avg if partial include avg times else blank and 0 0 or sum to f size round 2 end e
  • MS 身份和访问工具 MVC 4

    这个 VS 2012 扩展旨在允许我将本地开发 STS 添加到我的 MVC 应用程序中http visualstudiogallery msdn microsoft com e21bf653 dfe1 4d81 b3d3 795cb1040
  • MongoDB - 使用 C# 驱动程序按日期和时间搜索

    您好 我想使用 MongoDB 的 C 驱动程序查找两个日期 带时间 之间的条目 但我使用的 Find Filter 方法会忽略时间并仅按日期搜索 我认为 我究竟做错了什么 My POCO public class TestClassFor
  • 使用 Gradle 运行 Karma?

    我有 Jasmine 单元测试 我想运行它并获取伊斯坦布尔代码覆盖率报告 我可以运行命令行脚本来在 Jenkins 中运行 Karma 但最好使用我的 build gradle 执行所有内容 是否可以使用 Gradle 运行 Karma 我
  • “异步”是否在单独的线程中运行? [复制]

    这个问题在这里已经有答案了 当我调用 foo 时 该方法是否在单独的线程上运行 public async Task
  • C# 中两个问号在一起意味着什么?

    遇到了这行代码 FormsAuth formsAuth new FormsAuthenticationWrapper 这两个问号是什么意思 是某种三元运算符吗 在谷歌上很难查到 它是空合并运算符 非常类似于三元 立即 if 运算符 也可以看
  • var myArray =[], 名称;?

    下面的语句中 name 有什么作用 var myArray name 我通常按 如下方式初始化数组 var myArray 它是简写 var myArray var name 这是关于个人喜好
  • 在树枝中循环并在三次迭代后中断

    我有以下树枝代码 for likeditem in user getItemLikes iterate over each liked items here endfor 但是我只想迭代前 3 项user getItemLikes 我该怎么
  • 与界面交互?

    从我读到的内容看来 人们可以与界面进行交互 例如 假设我有一个带有空方法 eat 的接口 然后有2个子类正在实现这个接口 我的控制器可以仅与界面交互并使用它的 eat 方法吗 看看这个链接中的图片strategy 除了访问其中定义的任何常量
  • 使用 Python 和 Numpy 创建原始图像的图像图块 (m*n)

    我正在使用 numpy 从 16 位 tiff 图像 13777 16004 创建 224 224 的图块 我能够沿着行和列裁剪 切片成 224 224 的相等图块 我在尝试创建新的图块时遇到了问题 移动图块大小的一半 例如 我想要实现的粗