2017-05-09 185 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