python - 如何使用cv2分割图像?

标签 python opencv

我有图像 paint.bmp 。我想将其拆分为32x32的块。这是我的代码:

import cv2

image = cv2.imread('paint.bmp')
img_h, img_w = image.shape[:2]
bl_w, bl_h = 32, 32

for i in range(int(img_h/bl_h)):
  for j in range(int(img_w/bl_w)):
    cropped = image[i*bl_h:bl_h, j*bl_w:bl_w]
    cv2.imwrite("Cropped image{}{}.bmp".format(str(i+1), str(j+1)), cropped)

第一个块正在保存,但是在程序崩溃后,出现以下情况:cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp:715: error (-215:Assertion failed) !_img.empty() in function 'cv::imwrite'

最佳答案

问题出在线上cropped = image[i*bl_h:bl_h, j*bl_w:bl_w]
在第一个块中,您像这样 slice :image[0:32, 0:32],这很好用。但是,在第二个块中,您尝试使用image[32:32, 32:32],它将始终返回一个空数组。

有一种更简单的方法可以做到这一点:

import cv2

image = cv2.imread('image.bmp')
img_h, img_w = image.shape[:2]
bl_w, bl_h = 32, 32

for i in range(int(img_h/bl_h)):
  for j in range(int(img_w/bl_w)):
    cropped = image[i*bl_h:(i+1)* bl_h, j*bl_w:(j+1)*bl_w]
    cv2.imwrite("Cropped image{}{}.bmp".format(str(i+1), str(j+1)), cropped)

关于python - 如何使用cv2分割图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61969072/

相关文章:

python - 用于绘制 ROC 曲线的 libsvm

python - Apache2 (Ubuntu 16.04) 上的 Django 报告 'No module named mysite.settings'

c# - 图像中 Blob 的边界框

python - 根据第二个列表中的元素对列表进行排序和过滤

python - 我正在尝试 Stack、Melt、Grouby 或 reshape Pandas DataFrame

python - 如何使用带有两个字段之和的 where 子句

c++ - 创建一个程序以在 openWRT 上运行它入门

c++ - 在 Ubuntu : "Invalid or incomplete multibyte or wide character", 和有趣的 UTF-8 字符上执行编译文件

opencv - 运行 thumbor 会产生 ImportError : No module named cv2. cv

opencv - SIFT 匹配和识别?