Я пытаюсь найти самую яркую точку на изображении и сделать какую-то "карту яркости" с функцией ниже.Он отлично работает с одним изображением, но когда я пытаюсь запустить функцию для всех изображений в каталоге, он делает 19 итераций, а затем перебивает с различными ошибками памяти.
Я использую Qt Creator 4.5.на основе Qt 5.10 с библиотекой Open cv
free(): corrupted unsorted chunks
free(): invalid next size (normal)
malloc_consolidate(): invalid chunk size
Я понимаю, что у меня проблемы с памятью, но не могу найти, где я это сделал.Я новичок в программировании и не использовал функции памяти в этой программе.
Функция, где возникает проблема.Обычно он разбивается на строку с convertTo()
.
cv::Mat Plot::statistic(const std::vector<cv::KeyPoint> &kp, const size_t dist, cv::Mat output_size) {
cv::Mat result = cv::Mat::zeros(output_size.size(), CV_32F);
for(int i = 0, imax= kp.size(); i < imax; ++i) {
cv::KeyPoint curr_kp=kp[i];
for(size_t m = curr_kp.pt.x - dist/2 ; m < curr_kp.pt.x + dist/2; ++m)
for(size_t n = curr_kp.pt.y - dist/2; n < curr_kp.pt.y + dist/2; ++n)
if(abs(cv::norm(cv::Point2f(m,n) - curr_kp.pt)) < dist/2)
result.at<float>(n,m) += 255.f/kp.size();
}
double maxVal=1;
cv::Point point_max;
cv::minMaxLoc(result,NULL,&maxVal,NULL,&point_max);
result.convertTo(result,CV_8U,255.f/maxVal);
return result;
}
Как я это называю:
for(int i=2,imax=plot_analyse.size();i<imax;i++) {
QString curr_img=input_image.absoluteFilePath(plot_analyse[i]);
QString output_path=output_dir+"/pltnst_"+curr_img.section("/",-1); //Setting output folder
mt_make.Make_analysis(curr_img,5000); //Finding up to 5000 keypoints on image
std::vector<cv::KeyPoint> original_kp = mt_make.Keypoints(); //Make a variable for keypints
if (original_kp.empty()) {continue; }
cv::Mat output_mat=Do.Open_image(curr_img.toStdString()); //Opening current image
output_mat=make_maps.statistic(original_kp,100,output_mat); //Calling function
cv::imwrite(output_path.toStdString(),output_mat); //Saving ready brightness map
}
Входная папка содержит 500+ серых изображений с разрешением 1000x1000.Я ожидаю, что все эти изображения будут иметь карты яркости в выходной папке и точки максимальной яркости для каждого.