2013年9月13日金曜日

PERC to OpenCV その2

一月ほど開いてしまったが、締め切りが迫ってしまい、少しお尻に火がつき始めた。

わけがあり、Intel Perceputual Computing SDK (PERC SDK)を触ることになったが、情報がいまひとつ少ない。depth imageがほしいだけなので、PERCとOpenCVのブリッジを作成し、OpenCVで処理することとした。

PERCでは、MatにあたるクラスがPXCImageとなる



ようやくRGBの変換方法がわかった。エラー処理は抜いている。

UtilPipeline pp;
PXCImage* pImage;
PXCImage::ImageData imageData;
cv::Mat    matRGB = cv::Mat(cv::Size(640, 480), CV_8UC3);

pp.EnableImage(PXCImage::COLOR_FORMAT_RGB24, 640, 480);
pp.Init();
pp.AcquireFrame(true);
if (pImage->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::COLOR_FORMAT_RGB24, &imageData) >= PXC_STATUS_NO_ERROR)
{
    memcpy(matRGB.data, (uchar*)imageData.planes[0], 640*480*3*sizeof(uchar));
}
pp.ReleaseFrame();

これで、matRGBにカラーデータが格納される

複数からアクセスされることを想定しているため、イメージのリソースにアクセスする前に、調停を行い、アクセス権を取得しなければいけない。また、アクセス権は、短時間で開放しないといけないので、1フレーム毎に、アクセス権が必要となる。

少しめんどくさいし、アクセス権取得のオーバヘッドはどれくらいなのだろうか?
また、他のアプリは想定していないので、アクセス権が取れない場合を想定していないが、まじめに考えるとエラー処理が必要となる。

0 件のコメント:

コメントを投稿