0

24ビットRGB形式の画像バッファがあります。このバッファは、cv::Matにコピーされます。

cv::Mat mat = cv::Mat(image->height, image->width, CV_8UC3, image->data);

このバッファはRGB形式であり、OpenCVはBGR形式を使用しているため、次の方法matでBGRに変換しています。

cv::cvtColor(mat, mat, CV_RGB2BGR);

これは機能しますが、元の画像を確認すると、そのチャネルも反転しているため(したがって、間違っているため)、これが発生することは望ましくありません。

(私の画像バッファ)をそのままにして、matチャンネルの順序を逆にしたいのですが。image-dataどうやってやるの?

4

1 に答える 1

5

cv::cvtColor(mat, mat, CV_RGB2BGR);を使用すると、実際にはマットを再作成しますが、RGB->BGR変換されたデータでデータを上書きすると思います(確かではありません) 。ポインタを使用して「マット」にデータを渡すため、マット内のデータを上書きすると、「画像->データ」も変更されます。

したがって、次のパフォーマンスよりも低いパフォーマンスは期待できません。

cv::Mat mat = cv::Mat(image->height, image->width, CV_8UC3, image->data);
cv::Mat mat2;
cv::cvtColor(mat, mat2, CV_RGB2BGR);
//Work with mat 2 now

上書きするのではなく、新しいデータを書き込みます。これは同じパフォーマンスコストを負担するはずです...色変換後の画像をどのように処理するかはわかりませんが、パフォーマンスが異なっていても、全体的に小さな影響がある可能性があります。

于 2012-08-30T18:29:40.130 に答える