我没有在c ++中手动控制内存,但是却遇到了内存错误

时间:2019-02-07 10:15:13

标签: c++ qt opencv free

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

0 个答案:

没有答案