我得到一个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);
}