python - 如何用cv2分割图像?
问题描述
我有图像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]
在第一个块中,您像这样切片: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)
推荐阅读
- javascript - 获取日期时间输入字段的值
- lua - The rules for the # operator
- python - 如何将图像转换为感知器算法的输入向量?
- android - LiveDataReactiveStreams.fromPublisher 不工作
- java - Springboot liquibase 回滚锁定失败
- css - Angular:如何更改里面的图标
? - powerbi - MS Power BI 中 2 列之间的天数差异
- python - 如何在ORM查询中使用路径编写mysql json_contains函数的第一个参数
- nlp - 如何改进我的 spaCy 模型以完美识别坐标?
- javascript - JavaScript 中的自定义事件与简单地调用常规函数有何不同?