私は C++ で Kinect SDK を使用して、空間内の平面の近くに点の画像を生成し、それらをタッチとして使用することを目標にしています。そのプロセスの結果の 3 倍スケールの画像を添付したので、すべて肉汁です。
私の質問は、OpenCV を使用して、この画像 (およびそのような画像) からフレームごとにブロブを生成し、タッチに使用する最善の方法です。私が ProcessDepth コールバックで試したことは次のとおりです。ここで、img はタッチ画像のモノクロ cv::Mat であり、out は空の cv::Mat です。
cv::Canny(img,out,100,200,3);
cv::findContours(out,contours,cv::RETR_TREE,cv::CHAIN_APPROX_SIMPLE,cv::Point(0,0));
mu.resize(contours.size());
mc.resize(contours.size());
for(int i = 0; i<contours.size();i++){
mu[i] = cv::moments(contours[i],true);
}
for(int i = 0; i<contours.size();i++){
mc[i] = cv::Point2f(mu[i].m10/mu[i].m00, mu[i].m01/mu[i].m00);
}
(もっと多くのコードを投稿したいのですが、VMWare は私がコードをコピーして貼り付けることを許可していません。もっと必要な場合は、質問してください。)
その時点で、フレームのブロブの重心を取得する必要があると思いますが、実際にはそこにはありません。私は、contour.size() が 0 より大きい値を返したときにエラーが発生するか、少しいじくり回すと、大きな負の数を含む、非常に奇妙に見える瞬間が発生します。だから私の質問は次のとおりです:
- findContours のフラグが関係している限り、下の画像を blob データに変換して良い結果を得る方法に関する推奨事項はありますか?
- 私はすでにモノクロ画像を持っているので、Cranny またはしきい値を気にする必要さえありますか? Cranny の場合、処理しているピクセル数に対して 3 のカーネルが大きすぎますか?
- 輪郭検索はこのサイズの画像で機能しますか? (160 x 90 っぽいですが、かなり恣意的です。より一般的には小さめです。)
- OpenCV 関数は非同期ですか? 画像と等高線ベクトルがアプリケーション クラスのプロパティとして存在しない場合、無効なアドレス エラーが多数発生します。(私が特に才能のある C++ プログラマーではないことを認めたのは私が初めてです。)
- 画像から画像へのタッチに対応する一連のポイントに移動する簡単な方法はありますか?
参考までに、OpenCV ダウンロードのいくつかの例と、この例を引用しています。
より良い回答を得るために他の情報が必要な場合はお知らせください。提供できるように努めます。