First time here? Check out the FAQ!

Ask Your Question
0

Hi.. i'm new to opencv and trying shape detection. I have faced the following error "Unhandled exception (opencv_imgproc243d.dll) in ShapeDetection.exe " Can anyone knows how to solve this???

asked Nov 17 '16

updated Nov 17 '16

berak gravatar image

My program,

int main()
{
    //cv::Mat src = cv::imread("polygon.png");
    cv::Mat src;
    cv::Mat gray;
    cv::Mat bw;
    cv::Mat dst;

    std::vector<cv::Point> approx;
    std::vector<std::vector<cv::Point>> contours;

    VideoCapture capture(0);
    int q;

    while (cvWaitKey(30) != 'q')
    {
        capture >> src;
        if (true)
        {
            // Convert to grayscale
            cv::cvtColor(src, gray, CV_BGR2GRAY);

            // Use Canny instead of threshold to catch squares with gradient shading
            blur(gray, bw, Size(3, 3));
            cv::Canny(gray, bw, 80, 240, 3);
            cv::imshow("bw", bw);
            //cv::bitwise_not(bw, bw);

            // Find contours
            cv::findContours(bw.clone(), contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);

            src.copyTo(dst);

            for (int i = 0; i < contours.size(); i++)
            {
                // Approximate contour with accuracy proportional
                // to the contour perimeter
                cv::approxPolyDP(cv::Mat(contours[i]), approx, cv::arcLength(cv::Mat(contours[i]), true)*0.02, true);

                // Skip small or non-convex objects
                if (std::fabs(cv::contourArea(contours[i])) < 100 || !cv::isContourConvex(approx))
                    continue;
..................

Facing the problem in the for loop when i=1 and breaks at point cv::approxPolyDP().

Preview: (hide)

Comments

any chance, you're using debug dlls with release build ?

berak gravatar imageberak (Nov 17 '16)edit

Just saying, OpenCV 2.4.3 is already too old by now. Either upgrade to 2.4.13, or directly move to 3.x branch (3.1?)

LorenaGdL gravatar imageLorenaGdL (Nov 17 '16)edit

can we see the rest of the while loop ?

berak gravatar imageberak (Nov 17 '16)edit

Rest of the while loop...

if (approx.size() == 3) { setLabel(dst, "TRI", contours[i]); // Triangles } else if (approx.size() >= 4 && approx.size() <= 6) { // Number of vertices of polygonal curve int vtc = approx.size();

                    // Get the cosines of all corners
                    std::vector<double> cos;
                    for (int j = 2; j < vtc + 1; j++)
                        cos.push_back(angle(approx[j%vtc], approx[j - 2], approx[j - 1]));

                    // Sort ascending the cosine values
                    std::sort(cos.begin(), cos.end());

                    // Get the lowest and the highest cosine
                    double mincos = cos.front();
                    double maxcos = cos.back();

                    // Use the degrees obtained above and the number of vertices
                    // to determine the shape of the contour
                    if (vtc == 4)
                        setLabel
shoebtamboli gravatar imageshoebtamboli (Nov 17 '16)edit

// to determine the shape of the contour if (vtc == 4) setLabel(dst, "RECT", contours[i]); else if (vtc == 5) setLabel(dst, "PENTA", contours[i]); else if (vtc == 6) setLabel(dst, "HEXA", contours[i]); } else { // Detect and label circles double area = cv::contourArea(contours[i]); cv::Rect r = cv::boundingRect(contours[i]); int radius = r.width / 2;

                    if (std::abs(1 - ((double)r.width / r.height)) <= 0.2 &&
                        std::abs(1 - (area / (CV_PI * (radius*radius)))) <= 0.2)
                        setLabel(dst, "CIR", contours[i]);
                }
            }
        cv::imshow("src", src);
        cv::imshow("dst", dst);

    }
shoebtamboli gravatar imageshoebtamboli (Nov 17 '16)edit

Also i'll upgrade opencv and test it.... thanks for the reply

shoebtamboli gravatar imageshoebtamboli (Nov 17 '16)edit

1 answer

Sort by » oldest newest most voted
0

answered Nov 17 '16

KirtiSwagat gravatar image

May be the named dll is missing. Try to find the dll and put it in the folder where your programe is present.

Preview: (hide)

Comments

naw, prog would not run, if a dll is missing.

(nice, that you try to help, though ;)

berak gravatar imageberak (Nov 17 '16)edit

dll is present..but still facing the problem..

shoebtamboli gravatar imageshoebtamboli (Nov 17 '16)edit

Question Tools

1 follower

Stats

Asked: Nov 17 '16

Seen: 678 times

Last updated: Nov 17 '16