簡體   English   中英

為什么openCV的convertto功能不起作用?

[英]Why does openCV's convertto function not work?

我的圖像有4個通道,采用4 * UINT8格式。

我試圖將其轉換為3通道浮點數,我正在使用此代碼:

images.convertTo(images,CV_32FC3,1/255.0);

轉換后,圖像采用浮動格式,但仍有4個通道。 如何擺脫OpenCV中的第4個(alpha)頻道?

正如@AldurDisciple所說, Mat::convertTo()旨在用於更改Mat的數據類型,而不是用於更改通道數。

要解決這個問題,您應該將其分為兩個步驟:

cvtColor(image, image, CV_BGRA2BGR);       // 1. change the number of channels
image.convertTo(image, CV_32FC3, 1/255.0); // 2. change type to float and scale

函數convertTo旨在用於專門更改Mat的數據類型。 如文檔( 鏈接 )中所提到的,輸出圖像的通道數始終與輸入圖像相同。

如果要更改數據類型減少通道數,則應使用splitmergeconvertTo的組合:

cv::Mat img_8UC4;

cv::Mat chans[4];
cv::split(img_8UC4,chans);

cv::Mat img_8UC3;
cv::merge(chans,3,img_8UC3);

cv::Mat img_32FC3;
img_8UC3.convertTo(img_32FC3);

另一種方法可能是自己重新編碼算法,這非常簡單,可能更有效。

OpenCV的cvtColor函數允許您轉換Mat的通道類型和數量。

void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )

所以這樣的東西會將彩色4通道轉換為彩色3通道:

cvtColor(image, image, CV_BGRA2BGR, 3) ;

或者使用mixChannels函數可能更有效,如果您查看文檔,其示例將顯示如何拆分通道。

然后,如果您真的想將其更改為特定類型:

image.convertTo(image,CV_32F);

暫無
暫無

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

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