OpenCV控制台应用程序

时间:2016-08-11 09:05:06

标签: c++ opencv memory-management

我得到一个example围绕它在位图图片中看到的轮廓,并且效果很好!

但是,代码将成为使用跳跃运动的更大项目的一部分,我需要它在connsole中运行并且只给我值。我不需要打开任何窗户。

所以当我运行以下代码时,我得到_pFirstBlock == pHead。我搜索了错误,似乎我的DLL不在多线程调试DLL(/ MDd)中,但它们是。我知道这个,因为如果我删除main()中的所有内容,应用程序运行正常。如果我像往常一样运行应用程序,我会在main()结束时收到错误 - 释放内存时。我将main()中的所有代码放在一个空的范围内只是为了验证这一点,它在范围的末尾崩溃了同样的错误。

所以它显然与释放记忆有关。

它会是什么?

使用OpenCV 2413

完整代码:

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace cv;
using namespace std;
Mat src; Mat src_gray;
int thresh = 20;
RNG rng(12345);


int main(int, char** argv)
{
    {
        src = imread(argv[1], 1);
        cvtColor(src, src_gray, COLOR_BGR2GRAY);
        blur(src_gray, src_gray, Size(3, 3));

        cout << endl;
        Mat threshold_output;
        vector<vector<Point> > contours;
        vector<Vec4i> hierarchy;
        threshold(src_gray, threshold_output, thresh, 255, THRESH_BINARY);
        findContours(threshold_output, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));
        vector<vector<Point> > contours_poly(contours.size());
        vector<Point2f>center(contours.size());
        vector<float>radius(contours.size());
        for (size_t i = 0; i < contours.size(); i++)
        {
            approxPolyDP(Mat(contours[i]), contours_poly[i], 3, true);
            minEnclosingCircle(contours_poly[i], center[i], radius[i]);
        }
        cout << "Found " << contours.size() << " contours. " << endl;
        Mat drawing = Mat::zeros(threshold_output.size(), CV_8UC3);
        for (size_t i = 0; i < contours.size(); i++)
        {
            Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
            circle(drawing, center[i], (int)radius[i], color, 2, 8, 0);


            cout << "Found one at: (" << center[i].x << ", " << center[i].y << ") radius = " << radius[i] << endl;
        }


        drawing.release();
        threshold_output.release();
        src_gray.release();
        src.release();


    } //////////// CRASHES

    return(0);
}

error example

0 个答案:

没有答案