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
    评论
使用OpenCV-Python进行图像调整大小,你可以根据不同的需求选择不同的方法。以下是两种常见的调整大小方法: 1. 使用比例调整大小:你可以根据所需的大小百分比来调整图像的大小。首先,你需要读取图像并获取其原始尺寸。然后,通过计算新的宽度和高度,并使用cv2.resize函数来调整图像的大小。最后,你可以显示和保存调整后的图像。以下是一个示例代码: ``` import cv2 img = cv2.imread('./Pictures/python.png', cv2.IMREAD_UNCHANGED) print('Original Dimensions: ', img.shape) scale_percent = 60 # 调整的百分比 width = int(img.shape * scale_percent / 100) height = int(img.shape * scale_percent / 100) dim = (width, height) resized = cv2.resize(img, dim, interpolation=cv2.INTER_AREA) print('Resized Dimensions: ', resized.shape) cv2.imshow("Resized image", resized) cv2.waitKey(0) cv2.destroyAllWindows() ``` 2. 使用固定大小调整大小:你可以根据给定的宽度和高度像素值来调整图像的大小。首先,你需要读取图像并获取其原始尺寸。然后,通过设置新的宽度和高度,并使用cv2.resize函数来调整图像的大小。最后,你可以显示和保存调整后的图像。以下是一个示例代码: ``` import cv2 img = cv2.imread("./Pictures/python.png") print('Original Dimensions: ', img.shape) width = 350 height = 450 dim = (width, height) resized = cv2.resize(img, dim, interpolation=cv2.INTER_AREA) print('Resized Dimensions: ', resized.shape) cv2.imshow("Resized image", resized) cv2.waitKey(0) cv2.destroyAllWindows() ``` 请注意,上述代码的"./Pictures/python.png"是示例图像的路径。你需要根据你自己的图像路径进行更改。此外,你还可以根据需要调整插值方法(例如,`cv2.INTER_LINEAR` 或 `cv2.INTER_CUBIC`)来获得更好的调整结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python-OpenCVresize()函数](https://blog.csdn.net/dianshu1593/article/details/101523772)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值