簡體   English   中英

OpenCV:將 3 通道圖像轉換為 4 通道

[英]OpenCV: transforming 3 channel image into 4 channel

我正在嘗試將 3 通道圖像更改為 4 通道,如下所示:

cv::VideoCapture video;
video.open("sample.avi");
cv::Mat source;
cv::Mat newSrc;
int from_to = { 0,0, 1,1, 2,2, 3,3 };
for ( int i = 0; i < 1000; i ++ )
{
   video >> source;
   cv::mixChannels ( source, 2, newSrc, 1, from_to, 4 );
}

然后我得到了

too many input arguments in function call

對於“mixChannels”行。 此外,我不確定我是否正確地為我的目標提供了論據。 有人能幫我嗎? 謝謝你。

您可以將 3 通道圖像轉換為 4 通道,如下所示:

cv::Mat source = cv::imread(path);

cv::Mat newSrc(source.size(), CV_MAKE_TYPE(source.depth(), 4));

int from_to[] = { 0,0, 1,1, 2,2, 2,3 };

cv::mixChannels(&source,1,&newSrc,1,from_to,4);

這樣,通道 4 將是通道 3 的副本。通過在from_to列表中使用負數,輸出通道為零填充。 例如:

int from_to[] = { 0,0, 1,1, 2,2, -1,3 };

第四個頻道應該包含什么? 怎么樣:

VideoCapture cap(0);
Mat frame;
cap >> frame;

Mat RGBA(frame.size(), CV_8UC4, camData);
cv::cvtColor(frame, RGBA, CV_BGR2RGBA, 4);

我覺得應該是這樣的:

cv::Mat source = cv::imread(path);
cv::Mat newSrc = cv::Mat(source.rows,source.cols,CV_8UC4);

int from_to[] = { 0,0, 1,1, 2,2, 3,3 };
cv::mixChannels(&source,1,&newSrc,1,from_to, source.channels());

在 C++11 中,您可以使用初始化列表為內聯批量轉換提供多個矩陣:

cv::mixChannels({{source}}, {{newSrc}}, from_to, source.channels());

我們設置了 3 個要復制的對,因此這將 newsrc 中的 4 通道留空。 而第二個和第四個參數中的1表示指針source和newSrc指向一個要處理的元素。 最后一個參數給出了 from_to 的長度。

我正在嘗試將3通道圖像更改為4通道,如下所示:

cv::VideoCapture video;
video.open("sample.avi");
cv::Mat source;
cv::Mat newSrc;
int from_to = { 0,0, 1,1, 2,2, 3,3 };
for ( int i = 0; i < 1000; i ++ )
{
   video >> source;
   cv::mixChannels ( source, 2, newSrc, 1, from_to, 4 );
}

然后我得到了

too many input arguments in function call

用於“ mixChannels”行。 此外,我不確定我是否為自己的目標正確地提出了論據。 有人能幫我嗎? 謝謝你。

暫無
暫無

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

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