SystemError: tile cannot extend outside image

深度学习中遇到的问题总结DAY 3

前言

今天在做人脸识别时遇到个关于图像裁剪的问题,SystemError: tile cannot extend outside image(图块无法扩展到外部图像),总的来说就是图像裁剪时不能存在负值。第一次接触这个问题,我看其他博主也未提出解决方案,因此我在这简单的提下,希望能帮助到同样是第一次遇到的小白们。

错误产生原因分析

在人脸识别前需要先进行人脸检测,然后对检测到的人脸进行裁剪,而 SystemError: tile cannot extend outside image 就是出现在裁剪过程中的,正常情况下从摄像头内读取一帧若人脸全在图片内,情况如下(蓝色代表摄像头的范围即传入的原图,橙色代表人脸位置):
此时人脸的四个检测点x1,x2,y1,y2均为正值,因此此时进行裁剪不会报错(crop_img = old_image[y1:y2, x1:x2])
在这里插入图片描述
若当使用笔记本摄像头截图的时候,由于离镜头太近,导致边框超出摄像头截图范围,情况如下:
在这里插入图片描述由上图很容易得知此时人脸的四个检测点中x1,x2,y2为正值,而y1为负值,因此此时使用若采用 crop_img = old_image[y1:y2, x1:x2] 进行图像裁剪,那么系统会因为y1为负值而报 SystemError: tile cannot extend outside image(图块无法扩展到外部图像)
同理当x1为负值时也会报同样错误,情况如下:
在这里插入图片描述

解决方案

在找到错误产生原因后相信各位都已经想到解决的办法了,没错就是采用 np.maximum(x,y)np.minimum(x,y) 的方法,在numpy中 maximum 是选择x与y当中的较大值,而 minimum 则是选择较小值。因此我们来看看具体的解决方案吧。

会导致报错的代码如下:

        for b in boxes_conf_landms:
            text = "{:.4f}".format(b[4])
            b = list(map(int, b))
            x1 = b[0]
            x2 = b[2]
            y1 = b[1]
            y2 = b[3]
            crop_img = old_image[y1:y2, x1:x2]
            scaled = np.array(Image.fromarray(crop_img).resize((160, 160)))

此时由于未对x1与y1做处理,因此x1与y1会存在负值的情况,因此会报错。

处理后的代码:

        for b in boxes_conf_landms:
            text = "{:.4f}".format(b[4])
            b = list(map(int, b))
            x1 = np.maximum(b[0],0)
            x2 = np.minimum(b[2],old_image.shape[1])
            y1 = np.maximum(b[1],0)
            y2 = np.minimum(b[3],old_image.shape[0])
            crop_img = old_image[y1:y2, x1:x2]
            scaled = np.array(Image.fromarray(crop_img).resize((160, 160)))

此时当b[0]与b[1]为负值时小于0,x1与y1会取0,而不是取b[0]与b[1],因此x1与y1不会取到负值,所以无论你的人脸是否在图像内程序都不会报SystemError: tile cannot extend outside image(图块无法扩展到外部图像)。

以上就是我对SystemError: tile cannot extend outside image报错的分析与总结了,希望能帮到遇到同样错误的你。

  • 25
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: 这个错误信息的意思是“系统错误:瓦片不能超出图像范围”。这通常出现在图像处理过程中,可能是因为要对图像进行裁剪或缩放操作时设置的参数不正确,导致生成的瓦片(tile)超出了原始图像的边界。要解决这个问题,可以检查一下代码中的参数设置,确保不会生成超出原始图像范围的瓦片。 ### 回答2: 这个报错信息通常是在使用Python中的Pillow或者OpenCV库进行图片处理时出现的。它的意思是说,对于一个给定的图片,在进行某些操作时,出现了平铺(tile)超出了图片边界(outside image)的情况。 具体来说,一般是因为我们要对一张图片进行某种操作,例如裁剪(crop)、缩放(resize)或者旋转(rotate)等等,但是我们指定的操作区域或者输出尺寸等参数超出了原始图片的边界,导致平铺操作出错。 解决这个问题的方法主要是要检查我们指定的操作参数是否合理,确保操作区域或者输出尺寸不会超出原始图片的边界。特别是在进行缩放或者旋转等涉及到改变图片尺寸的操作时,需要格外注意。 除此之外,还可以通过给图片边缘留出一定的保护区域,或者进行边缘填充等方式来避免超出边界导致的错误。在具体的使用中,还可以查找相关文档或者寻求专业人员的帮助以解决该问题。 ### 回答3: 这个报错信息意味着系统无法处理一张图像,因为其中的一个图块超出了图像边界。Tile是指将一个大的图像分成许多小的部分,这样可以更高效地处理或显示它们。每个瓷砖(tile)都有一个固定的大小,如果一个瓷砖的像素在边界之外,那么这个图块就会超出图像边界,这就导致了这个错误。 这个错误经常在使用图像处理软件时出现,通常是因为操作员在对图像进行裁剪、缩放或旋转时没有正确指定区域大小和位置。对于一些软件,这个错误可能会以不同的方式显示,但是核心的问题是相同的,就是图块超出了图像边界。 如果你遇到了这个错误,最好的解决方法是检查你的图像处理操作是否正确,包括图像的大小、位置和方向等。你可以尝试使用其他工具或方法来处理你的图像,或者可以尝试重新调整瓷砖大小,确保它们不会超出图像边界。如果这些方法都无效,你可能需要寻求专业的帮助来解决这个问题。 总之,systemerror: tile cannot extend outside image 是一个常见的图像处理错误,通常是由于瓷砖超出图像边界而导致的。要解决这个问题,你需要检查你的图像处理操作是否正确,并确保瓷砖不会超出图像边界。如果这些方法都无效,你可以考虑寻求专业的帮助来解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值