簡體   English   中英

如何正確地將cv :: Mat轉換為CV_8UC1?

[英]How to correctly convert cv::Mat to CV_8UC1?

我搜索了很多關於這個問題,但我無法解決它。
因此,我應該將16位3通道圖像轉換為8位1通道圖像。 我在cv::inpaint函數中使用這個二進制圖像。
maskBGR只有兩種顏色 - 黑色和白色,是我的源圖像。
所以,有代碼:

Mat mask;
maskBGR.convertTo(mask, CV_8UC1);
inpaint(image, mask, dst, 8, cv::INPAINT_TELEA);

之后我的程序崩潰了。 那是在命令行中寫的:

OpenCV Error: Unsupported format or combination of formats (The mask must be
8-bit 1-channel image) in unknown function, file ..\..\..\src\opencv\modules\
photo\src\inpaint.cpp, line 747

在inpaint.cpp中,第747行:

if( CV_MAT_TYPE(inpaint_mask->type != CV_8UC1 )
   CV_ERROR( CV_StsUnsupportedFormat, "The mask must be 8-bit 1-channel image" );

我做錯了什么?

convertTo()僅更改通道的類型,而不是通道的數量。

對於8位,3通道,它將是:

cvtColor(maskBGR, mask, CV_BGR2GRAY);

如果你的maskBGR真的是16位,3個通道,你需要2個步驟:

maskBGR.convertTo(maskBGR, CV_8U);
cvtColor(maskBGR, mask, CV_BGR2GRAY);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM