2

http://opencv.itseez.com/doc/tutorials/imgproc/shapeescriptors/moments/moments.html?highlight=を使用してこの手の重心を見つけることができるように、エッジを使用して手の不規則な形状を形成したいモーメント#コード. キャニー関数はエッジをカットするので、良い輪郭を得ることができません。出力http://imageshack.us/photo/my-images/208/cannywithblur.png/ とコードのサンプルを次に示します。

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace cv;
using namespace std;

int main(){

    cv::Mat image= cv::imread("open_1a.jpg");
    cv::Mat contours_mat;
    cv::Mat gray_image;

    blur( image, image, Size(3,3) );

    cv::Canny(image,
        contours_mat,
        40,
        120);
    cv::namedWindow("Image");
    cv::imshow("Image",image);
    cv::namedWindow("Canny");
    cv::imshow("Canny",contours_mat);
    cv::waitKey(0);
}

閉じた形状で輪郭が 1 つだけの輪郭を取得したい。これどうやってするの?

4

2 に答える 2

1

平均シフト クラスタリングを試すこともできます。これにより、手に対して適切で大きな接続領域が得られます。エッジのみに基づいて形状を識別しようとすると、特に形状が単純な多角形でない場合は注意が必要です。

http://my.safaribooksonline.com/book/programming/opencv/9780596516130/tracking-and-motion/mean-shift_and_camshift_tracking

平均シフト (または同様のアルゴリズム) が手と他のオブジェクトとの間の適切なセグメンテーションを生成できる場合、幾何学的中心または質量の中心を見つけるのは簡単です。

照明を変えることはできますか?それはかなり役立つかもしれません。指の先と中指の爪は、コントラストが低いため問題があります。背景の色と中指の爪の色の違いはほとんどありません。

正面からのコリメート照明は、シャドーイングをなくします。別のオプションは、バックライトを使用することです。

何らかの理由でエッジを操作する必要がある場合、壊れたエッジを結合する最も有望な手法の 1 つ (「形状の完成」) は、オイラー スパイラルなどの「自然な」または「美的」な曲線に依存します。2 つの端点とそれらの端点での接線が与えられると、自然な接続曲線を見つけることができます。

http://www.lems.brown.edu/vision/researchAreas/EulerSpiral/index.html

于 2012-09-21T02:16:02.133 に答える
1

バイナリ イメージのモルフォロジー クロージングを適用してみてください。これにより、構造化要素のサイズよりも小さいギャップを持つエッジが接続されます。

ドキュメント内の対応機能

モルフォロジー操作のチュートリアル

于 2012-09-20T09:45:36.610 に答える