2

まず第一に私の英語で申し訳ありませんが、顔追跡 API で Microsoft の Kinect SDK を使用しています。関数で顔の rect を取得していGetFaceRectます。私が今やりたいことは、ビデオ バッファーを OpenCV に変換し、OpenCVMatで顔以外のすべてを削除することです。ビデオ フレームから OpenCV マットに変換するには、次を使用します。

cv::Mat * openCVImg = new cv::Mat(cameraConfig.Height, cameraConfig.Width, CV_8UC4);
memcpy(openCVImg->data, m_KinectSensor.GetVideoBuffer()->GetBuffer(), m_KinectSensor.GetVideoBuffer()->GetBufferSize());  

問題は、顔の四角形を再度描画しようとしたときですが、今回は OpenCVを使用Matして四角形が左に移動し、顔と一致しません。

私は、画像がストライドで来るかもしれないことを読みましたが、

m_KinectSensor.GetVideoBuffer()->GetStride() / m_KinectSensor.GetVideoBuffer()->GetBytesPerPixel() 

フレームの幅はほぼ640になりました

4

1 に答える 1

0

ありがとう!Estebanが以前に提案したように、yを使用する代わりに、 memcpyバイトごとにバイトをコピー IFTResultします。cv::Mat

于 2012-12-15T14:40:15.417 に答える