RGB 画像を YCbCr 画像に変換するルーチンの実行時間を短縮しようとしています。私のコードは次のようになります。
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);
ただし、インターリーブされた RGB イメージを別のチャネル イメージにコピーする冗長な分割操作があるため、このコードは低速です。cvtColor 関数で、既にチャネル イメージに分割されている出力を作成する方法はありますか? ベクトルまたは行列の配列を入力として受け入れる _OutputArray クラスのコンストラクターを使用しようとしましたが、うまくいきませんでした。