【发布时间】:2017-05-09 13:50:35
【问题描述】:
cvtColor() 的 OpenCV documentation 不提供有关 HSV 到 BGR 转换的信息。它说不支持 16 位图像从 RGB 到 HSV 的转换。
我需要将每像素超过 8 位(16 位或 32 位都可以)的 HSV 图像转换为 RGB 图像。下面的代码给出了运行时错误。
cv::Mat hsv(10, 10, CV_16UC3, cv::Scalar(0)); // same in cv::Mat hsv(10, 10, CV_32F);
cv::Mat rgb(hsv.size(), hsv.type());
cv::cvtColor(hsv, rgb, cv::COLOR_HSV2BGR);
这是运行时错误
OpenCV Error: Assertion failed (scn == 3 && (dcn == 3 || dcn == 4) && (depth == CV_8U || depth == CV_32F)) in cv::ipp_cvtColor, file C:\InstalledPrograms\opencv_3.1\sources\modules\imgproc\src\color.cpp
【问题讨论】:
-
hsv中的像素是用什么填充的?我没有看到您在哪里分配像素值 -
opencv 假设(默认) HSV 的色调值在 0..180 范围内,所以也许您的未初始化值更大?如果文档说不支持 16 位,你为什么要尝试 16 位?!?如果你需要一些不支持的东西,也许你可以调整opencv源代码(它是开源的!)!
-
此消息告诉您输入图像中需要 3 个通道,输出图像中需要 3 或 4 个通道,这在您的示例中是可以的。但它进一步告诉你,atm 只允许 8U 和 32F 深度。请切换到 CV_32FC3 并告诉我们新的错误消息。
-
@Micka
CV_32FC3工作正常,谢谢。请把它写成答案,以便我接受。 -
@Melike 正是 Micka 所说的。现在您已经分配了值并将类型更改为
CV_32FC3或CV_8UC3,您应该不会收到错误。