Я столкнулся с этим, когда использую findCountours() в OpenCV, Ошибка утверждения отладки У меня есть Google много, но мне ничего не помогло, это часть моих кодов.
void HandTrack::ProcessFrame(...){
...
//Convert the colorImage into grayImage
Mat GrayImage;
cvtColor(ColorImages, GrayImage, CV_BGR2GRAY);
//Convert grayImage into binaryImage
Mat BinaryImage(GrayImage.rows, GrayImage.cols, CV_8UC1);
threshold(GrayImage, BinaryImage, 254, 255, CV_THRESH_BINARY);
bitwise_not(BinaryImage, BinaryImage);
//Get the contours from binaryImage
vector<vector<Point>> hand_contours;
findContours(BinaryImage, hand_contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);
BinaryImage.release();
//Draw the contours
Mat OutlineImage(GrayImage.rows, GrayImage.cols, CV_8UC1);
rectangle(OutlineImage, Point(0, 0), Point(BinaryImage.cols, BinaryImage.rows), Scalar(255, 255, 255),-1,8);
if (hand_contours.size() > 0) {
drawContours(OutlineImage, hand_contours, -1, (0, 0, 0), 1);
}
waitkey(1);
}
Ниже я пробовал:
Добавьте наконец
imshow("img",BinaryImage);
, и ничего не изменится;Комментируйте эту строку↓, все будет хорошо
findContours(BinaryImage, hand_contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);
Пройдитесь по кодам, все хорошо, пока «}» ниже
waitkey(1); }
Добавьте
hand_contours.~vector();
(функция уничтожения) перед кнопкой ожидания(1); ошибка утверждения отладки показывается везде, где бы она ни находилась;
Наконец, я решил эту проблему, изменив локальную переменную «hand_contours» на глобальную переменную. Но мне все еще интересно, почему это решилось. Спасибо, что прочитали :)