1

モニターから写真を撮り、曲線を抽出するiOS用のアプリをopenCVで開発していますが、しきい値処理後に画像にいくつかの明るいゾーンがある場合、完全な曲線ではなくいくつかの黒いゾーンが得られます

元の画像

しきい値処理後の処理済み画像

        original = [MAOpenCV cvMatGrayFromUIImage:_sourceImage];   
        cv::threshold(original, original, 70, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);

        findContours(original, contours, hierarchy,CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE );

        cv::Mat skel(original.size(), CV_8UC1, cv::Scalar(0));

        int idx = 0;
        for(; idx >= 0; idx = hierarchy[idx][0])
        {
            if (contours[idx].size()>250 && idx>-1){
                cv::Scalar color( 255,255,255);
                drawContours(skel, contours, idx, color, CV_FILLED, 8, hierarchy);
            }
        }
        cv::threshold(skel, skel, 100, 255, CV_THRESH_BINARY_INV);
        cv::erode(skel,skel,cv::Mat(),cv::Point(-1,-1),2);

では、例のように画像にいくつかの明るいゾーンがある場合に、画像を処理して曲線を抽出する方法

4

2 に答える 2

0

照明が不均一な背景がある場合は、最初に白いトップハットを適用することをお勧めします(または、MatLabの場合はこちら、OpenCV の場合はこちら)。

これは、半径 3 のタイプ disk の構造化要素を使用して得た結果です。

次に、選択したしきい値処理方法が機能します。

于 2016-06-27T07:20:11.760 に答える