我试图在图像中找到最亮的点,并使用下面的功能制作某种“亮度图”。它只能处理一张图像,但是当我尝试为目录中的所有图像启动功能时,它会进行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。我希望所有这些图像在输出文件夹中都有亮度映射,并且每个图像都有最大亮度点。