Convert image color space and output separate channels in OpenCV

Posted by Victor May on Stack Overflow See other posts from Stack Overflow or by Victor May
Published on 2012-12-10T16:40:17Z Indexed on 2012/12/10 17:03 UTC
Read the original article Hit count: 255

Filed under:

I'm trying to reduce the runtime of a routine that converts an RGB image to a YCbCr image. My code looks like this:

cv::Mat input(BGR->m_height, BGR->m_width, CV_8UC3, BGR->m_imageData);
cv::Mat output(BGR->m_height, BGR->m_width, CV_8UC3);

cv::cvtColor(input, output, CV_BGR2YCrCb);

cv::Mat outputArr[3];
outputArr[0] = cv::Mat(BGR->m_height, BGR->m_width, CV_8UC1, Y->m_imageData);
outputArr[1] = cv::Mat(BGR->m_height, BGR->m_width, CV_8UC1, Cr->m_imageData);
outputArr[2] = cv::Mat(BGR->m_height, BGR->m_width, CV_8UC1, Cb->m_imageData);  

split(output,outputArr);

But, this code is slow because there is a redundant split operation which copies the interleaved RGB image into the separate channel images. Is there a way to make the cvtColor function create an output that is already split into channel images? I tried to use constructors of the _OutputArray class that accepts a vector or array of matrices as an input, but it didn't work.

© Stack Overflow or respective owner

Related posts about opencv