gpt4 book ai didi

python - 关于OpenCV resize's INTER_AREA working domain的问题(func != 0 && cn <= 4 in function 'cv::hal::resize' failure)

转载 作者:太空宇宙 更新时间:2023-11-03 21:39:16 30 4
gpt4 key购买 nike

我对使用 INTER_AREA 插值时 OpenCV 的 resize 函数的工作域有疑问。以下是三种不同的插值:

import cv2
import numpy as np

cv2.resize(np.zeros((17, 99, 99), dtype=np.uint8), (64, 32), interpolation=cv2.INTER_AREA)
# OK
cv2.resize(np.zeros((200, 64, 4), dtype=np.uint8), (64, 32), interpolation=cv2.INTER_AREA)
# OK
cv2.resize(np.zeros((200, 64, 64), dtype=np.uint8), (64, 32), interpolation=cv2.INTER_AREA)
# error: OpenCV(4.1.1) ..\modules\imgproc\src\resize.cpp:3557: error: (-215:Assertion failed) func != 0 && cn <= 4 in function 'cv::hal::resize'

前两个工作正常,但最后一个失败。为什么会这样?什么样的输入/输出形状组合是可以接受的?

(请注意,该问题特定于 INTER_AREA,因为其他插值方案似乎适用于所有三种情况)。

最佳答案

OpenCV 的 resize() with INTER_AREA 仅适用于当旧图像宽度和高度不是新宽度和高度的整数倍时最多具有 4 个 channel 的图像(宽度和高度的比例因子不必相同,只要两个比例因子都是整数即可)。否则会产生错误。不幸的是,documentation 中似乎没有提到这一点。找出答案的唯一方法是深入研究 source code .

您的第一个示例有效,因为区域插值仅在图像缩小时使用(在 x 和 y 方向)。否则采用双线性插值,对 channel 无此限制。

关于python - 关于OpenCV resize's INTER_AREA working domain的问题(func != 0 && cn <= 4 in function 'cv::hal::resize' failure),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58185587/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com