openCV-python resize时通道数超512的错误和解决方法

问题

在resize特征图或者视频序列的时候,为了简洁通常将多个特征图stack后处理。但是cv2.resize有一个在官方文档没有报导的问题,即当channel_size超过 512时就会报一个莫名其妙的错误,如:

---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
/home/__/__/__.ipynb Cell 2 in ()
      1 import cv2
      2 temp1 = np.random.randn(64, 64, 513)
----> 4 cv2.resize(temp1, (12, 12))

error: OpenCV(4.7.0) /io/opencv/modules/imgproc/src/resize.cpp:3699: error: (-215:Assertion failed) !dsize.empty() in function 'resize'

如果坚持使用cv2的话,只能将图像按通道分块处理。但是stack处理本来就是为了看起来简洁,又要分块实在受不了。

解决方法

pytorch的transform和functional都有类似resize的操作,考虑到transform写下来也比较臃肿,就用了functional的插值函数来写一个resize函数,如下:

import torch
import numpy as np
from torch.nn import functional as F

def torch_resize(images, size):
    ''' 
    cv2 resize的时候最高的通道数为512 通过torch 的interpolate处理超出512的图像
    '''
    temp_iamges = F.interpolate(torch.tensor(images).permute(2, 0, 1).unsqueeze(0), 
                                size = size, mode='bilinear')
    return np.array(temp_iamges.squeeze(0).permute(1, 2, 0))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值