嗨,我写了这个简单的程序
Main.cpp
std::vector<cv::Mat> PD_Classifier_VEC;
#define Folder_Address ""
int Main()
{
int overall_counter=0;
for(int j = 0 ; j < 600 ; j++)
{
QString address = Folder_Address + QString::number(overall_counter++) +".jpg";
cv::Mat image = cv::imread(address.toUtf8().constData(),0);
PD_Classifier_VEC.push_back(image);
PD();
}
}
局电功能
void PD()
{
static int Total_Frame_Number=0;
Total_Frame_Number++;
cv::Mat Point_MAT = cv::Mat(PD_Classifier_VEC[0].size(),CV_8UC1,cv::Scalar::all(0));
....//Some Calculation //
PD_Classifier_VEC[0].release();
PD_Classifier_VEC.erase(PD_Classifier_VEC.begin());
}
这段代码工作正常,直到 j=56,之后 Qt 显示此错误并退出!
*** Error in `/home/parsa/QtProjects/QtVLPR/QtVLPR': corrupted double-linked list: 0x0000000000dcf880 ***
我在调试器模式下运行代码并将此 if 语句代码添加到 PD() 函数:
void PD()
{
static int Total_Frame_Number=0;
Total_Frame_Number++;
cv::Mat Point_MAT = cv::Mat(PD_Classifier_VEC[0].size(),CV_8UC1,cv::Scalar::all(0));
....//Some Calculation //
if(Total_Frame_Number==56)
{
std::cout<<Point_MAT<<"\n"; //it displays the elements perfectly
int Nonz = cv::countNonZero(Point_MAT); //it runs too
cv::imshow("Point_MAT",Point_MAT); //here the error appears !!!
cv::waitKey();
}
PD_Classifier_VEC[0].release();
PD_Classifier_VEC.erase(PD_Classifier_VEC.begin());
}
正如您所看到的,前两行上方提供的注释工作正常,但是当我尝试使用 imshow 显示图像时,程序崩溃并显示损坏的双链表错误!这里出了什么问题?
为什么我无法显示此图像,如果 POINT_MAT 图像已损坏,前两行如何正常工作?
附言
如果我从 j=57 启动程序,它会正常工作直到完成并且不会出现错误,因此
//some calculation
代码工作正常,我确信这一点。
我已经测试了许多其他函数,例如阈值、减法和...,它们适用于图像的数据部分,并且工作正常,但是当我添加适用于元数据+数据部分的函数时,损坏的双链表再次出现! !
cv::subtract(Point_MAT,Point_MAT,temp); //works fine because it only works on data part
Point_MAT.copyTo(Temp_MAT); //gives error cause it works on header part too ...