2

を使用して文字をセグメント化しています

adaptiveThreshold(crops_gray, crops_gray_resized, 255, 
CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY_INV,121,-35);

私も使っています

    adaptiveThreshold(crops_gray, thresh, 255,
CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, 81,-80);

問題は、一部の画像でBINARY_INVはパラメータを設定するまでクラッシュし81,-35 、一部の画像では同じ問題ですBINARY

たとえば、最初の「上」の画像は、BINARYset to81,-35およびBINARY_INVtoの結果を示しています。81,-80

BINARY to121,-35BINARY_INVtoを変更すると81,-80、画像の 2 番目の行が表示されます -> 2 番目の画像でエラーなしでクラッシュします

BINARY_INVto81,-35BINARYto を変更すると121,-80、最後の画像になります

自分が何をしているのかをより明確にするためのコードを提供しています。

for (int k = 0; k < j; k++) {

        cvtColor(crops[k], crops_gray, CV_RGB2GRAY);
        imshow("Crops_gray", crops_gray);

        Mat crops_gray_resized;
        resize(crops_gray, crops_gray, cvSize(160, 80));
        crops_gray_resized=crops_gray;
        imshow("img_rotated_resized ", crops_gray);

                Mat thresh;             
                imshow("crops_eq ", crops_gray);
        adaptiveThreshold(crops_gray, crops_gray_resized, 255,
                                CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY_INV,121,-35);
        adaptiveThreshold(crops_gray, thresh, 255,
                                        CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, 81,-80);
                imshow("crops_thresh ", crops_gray_resized);

        findContours(thresh, contours, hierarchy, CV_RETR_TREE,
                CV_CHAIN_APPROX_SIMPLE, Point(0, 0));

        vector<Point2f> ContArea(contours.size());
        for (int i = 0; i < contours.size(); i++) {
            approxPolyDP(Mat(contours[i]), contours_poly[i], 3, true);
            boundRect[i] = boundingRect(Mat(contours_poly[i]));

        }
        min = 0.0;
        float avg=0;
        float elem=0;
        int num=0;

        for (int i = 0; i < contours.size(); i++) {
                double a = contourArea(contours[i]);
                ratio = (float) boundRect[i].width / (float) boundRect[i].height;
                if ((a >= 40 && a < 800) && ((ratio >= min) && (ratio < 2))
                    ) {
                elem=elem+(float)boundRect[i].height;
                num++;
            }
        }
avg=(elem/(num));
printf("avg: %f",avg);
imshow("crops_thresh? ", thresh);
int l =0;
    /// Draw polygonal contour + bonding rects
    Mat drawing5 = Mat::zeros(crops_gray_resized.size(), CV_8UC3);
    for (int i = 0; i < contours.size(); i++) {
        Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255),
                rng.uniform(0, 255));
        double a = contourArea(contours[i]);
        ratio = (float) boundRect[i].width / (float) boundRect[i].height;

        if ((a >= 40 && a < 400) && ((ratio >= min) && (ratio < 2))
                && (float)boundRect[i].height > avg) {
            printf(" a: %f ratios: %f image%d height: %d \n", a, ratio, i,
                    boundRect[i].height);

            drawContours(drawing5, contours_poly, (int) i, color, 1, 8,
                    vector<Vec4i>(), 0, Point());
            rectangle(drawing5, boundRect[i].tl(), boundRect[i].br(), color,
                    CV_FILLED, 1, 0);

            Mat cropx(crops_gray_resized(boundRect[i]));
                            crops[l] = cropx;

                            imshow("crops0", crops[l]);
                            if (l == 1)
                                imshow("crops1", crops[l]);
                            if (l == 2)
                                imshow("crops2", crops[l]);
                            if (l == 3)
                                imshow("crops3", crops[l]);
                            if (l == 4)
                                imshow("crops4", crops[l]);
                            if (l == 5)
                                imshow("crops5", crops[l]);
                            if (l == 6)
                                imshow("crops6", crops[l]);
                            if (l == 7)
                                imshow("crops7", crops[l]);
                            if (l == 8)
                                imshow("crops8", crops[l]);
                            l++;
        }
    }

    imshow("Rectangles5", drawing5);

    waitKey(0);
}

私は今、何が起こっているのか完全に混乱しています。誰かが私が間違っていることを教えてもらえますか?

ここに画像の説明を入力

ここに画像の説明を入力

4

0 に答える 0