2017-05-09 184 views
0

OpenCV documentation of cvtColor()没有提供关于HSV到BGR转换的信息。它说,不支持从RGB到16位图像的HSV转换。在OpenCV中将HSV转换为RGB失败

我需要将每像素超过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

+0

什么是在'HSV像素“充满?我没有看到你分配像素值的位置 –

+0

opencv假定(默认)HSV的色调值在范围0..180内,所以你的未初始化的值可能更大?如果doc说16位不支持,为什么你会尝试16位?!?如果你需要不支持的东西,也许你可以调整opencv源代码(它是开源的!)! – Micka

+0

@Micka文档说,从RGB到HSV的转换不支持16位图像,但它没有提到从HSV到RGB的转换。它还表示,支持32位图像的RGB到HSV转换,但它也会给32位的HSV到RGB转换带来运行时错误。 – Melike

回答

2

而不是CV_32F你,因为你需要3个通道使用CV_32FC3

根据用于CV_16UC3你的错误消息(除了DOC),16比特既不支持RGB/BGR => HSV也不对HSV => RGB/BGR

+0

thx编辑! – Micka