使用 Nvidia NPP 调整图像大小时未记录的大小调整错误
Undocumented resize error when using Nvidia NPP to resize image
我正在尝试使用 Nvidia 性能基元库来调整图像大小,但nppiResize_8u_C3R
函数抛出了一个未在文档中列为该函数的错误返回代码之一的NPP_RESIZE_FACTOR_ERROR
。 这是我希望简单的代码:
#include <iostream>
#include <nppi.h>
int image_a_pitch;
NppiSize image_a_size = {.width = 960, .height = 540};
NppiRect image_a_roi = {.x = 0, .y = 0, .width = 960, .height = 540};
Npp8u* image_a = nppiMalloc_8u_C3(960, 540, &image_a_pitch);
int image_b_pitch;
NppiSize image_b_size = {.width = 960, .height = 540};
NppiRect image_b_roi = {.x = 0, .y = 0, .width = 960, .height = 540};
Npp8u* image_b = nppiMalloc_8u_C3(960, 540, &image_b_pitch);
NppStatus result = nppiResize_8u_C3R(image_a, image_a_pitch, image_a_size, image_a_roi, image_b, image_b_pitch, image_b_size, image_b_roi, NPPI_INTER_SUPER);
if (result != NPP_SUCCESS) {
std::cerr << "Error executing Resize -- code: " << result << std::endl;
}
您可能会注意到我实际上并没有调整图像大小,是的,这是真的,但我正在尝试为此错误创建最简单的情况。 从我一直在测试的内容来看,我为图像使用什么尺寸似乎并不重要,我仍然得到相同的返回错误代码,这似乎不是该函数的有效错误代码,而是折旧nppiResizeSqrPixel_8u_C3R
的错误代码。
我绝对希望得到一些帮助,指出我在设置导致此错误的库调用时所做的任何错误。
查看 jpegNPP CUDA 示例代码,我观察到以下顺序:
NppiInterpolationMode eInterploationMode = NPPI_INTER_SUPER;
if (nScaleFactor >= 1.f)
eInterploationMode = NPPI_INTER_LANCZOS;
NPP_CHECK_NPP(nppiResize_8u_C1R(..., eInterploationMode));
}
当我在您的示例中将您的插值模式从NPPI_INTER_SUPER
切换到NPPI_INTER_LANCZOS
时,错误对我来说消失了(CUDA 9.1,linux)。我怀疑 NPP 库中对此函数有一些未记录的 (AFAICT) 要求,即当调整大小比例因子为 1.0 或更大(您的比例因子为 1.0,它是源 ROI/destROI 的比率)时,不使用NPPI_INTER_SUPER
插值模式。
我建议您研究该示例代码中的用法,并在代码中建立类似的机制。
我已经请求使用适当的信息更新 CUDA 文档。 我没有任何进一步的细节。 欢迎您在 http://developer.nvidia.com 提交自己的错误
更新:我已经与 CUDA 团队确认,计划在未来的 CUDA 版本中对此进行文档更新。 简而言之,使用NPPI_INTER_SUPER
的要求是您必须进行缩小。 也就是说,X 源 ROI 维度除以 X 目标 ROI 维度的比率必须大于 1.0。 同样,Y 源投资回报率维度除以 Y 目标投资回报率维度的比率必须大于 1.0。 如果不满足上述任一条件,则无法使用NPPI_INTER_SUPER
插值模式。 例如,可以改用NPPI_INTER_LANCZOS
模式。
- 为char数组调整zlib-zpipe
- 调整大小后指向元素值的指针unordered_map有效?
- 将两个数组中的差异记录在第三个数组中
- 在C++中调整向量中的索引
- 哪些库可以通过Opencv调整曝光率
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- Alt+Enter 在 Win32 应用中,管理大小调整和分辨率
- 在容量内调整矢量大小时的性能影响
- 将 boost::odeint 与向量类一起使用,而无需调整向量的大小
- 将摄像机调整到俯视图
- 禁止在控制台上记录谷神星
- 创建 Spdlog 异步文件记录器时遇到困难
- Qt 图表条形图调整大小崩溃
- 除非重新绘制大小,否则SDL_Texture在调整大小后呈现黑色
- fastrtps:如何在发布/订阅级别使用 DDS 历史记录?
- 调整布局上的 QGraphicsView 小部件的大小
- 如何将自定义记录器与websocketpp一起使用?
- 如何在构建链接列表时调整头、尾指针
- C++结构到德尔福记录dll调用
- 使用 Nvidia NPP 调整图像大小时未记录的大小调整错误