У меня есть программа на C ++, которая вылетает при запуске. Я получаю следующую ошибку:
Это может быть связано с повреждением кучи, что указывает на ошибку в test1.exe или любой из загруженных им библиотек DLL.
Программа используется для идентификации руки через камеру подачи и определения контуров руки.
Код:
Это функция, где происходит сбой:
void showimgcontours(Mat &threshedimg,Mat &original)
{
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
int largest_area = 0;
int largest_contour_index = 0;
**findContours(threshedimg, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);** //this will find largest contour
for (int i = 0; i< contours.size(); i++) // iterate through each contour.
{
double a = contourArea(contours[i], false); // Find the area of contour
if (a>largest_area)
{
largest_area = a;
largest_contour_index = i; //Store the index of largest contour
}
}
//search for largest contour has end
if (contours.size() > 0)
{
//drawContours(original, contours,largest_contour_index, CV_RGB(0, 255, 0), 2, 8, hierarchy);
//if want to show all contours use below one
drawContours(original,contours,-1, CV_RGB(0, 255, 0), 2, 8, hierarchy);
}
}
Жирная линия (findContours) — это место, где программа прерывается.
Это где функция вызывается:
while ((key = waitKey(30)) != 27)
{
toggle(key);
cap >> frame;
flip(frame, frame, 180);
cvtColor(frame, hsvframe, COLOR_BGR2HSV);
inRange(hsvframe, Scalar(H_MIN, S_MIN, V_MIN), Scalar(H_MAX, S_MAX, V_MAX), rangeframe);
if (domorph)
morphit(rangeframe);
if (doblurthresh)
blurthresh(rangeframe);
if (showcontours)
showimgcontours(rangeframe, frame);
if (showchangedframe)
imshow("Camera", frame);
else
imshow("Camera", rangeframe);
}
}
Эта функция вызывается, когда пользователь нажимает клавишу «с».
Я гуглил решения, но не нашел ничего, что могло бы помочь.
Кто-нибудь, пожалуйста, помогите мне!
Задача ещё не решена.
Других решений пока нет …