我的代码
function(Mat m , ...){
//some code here
vector<Mat> chnls;
split(LA, chnls);
// code to take each channel and find the max in each r and channel
for(unsigned int z = 0 ;z<5;z++){
//Mat m1 = chnls[z].clone();
//find number of elements in m that are not 0
//the layer and max comparison
Mat dest1;
compare(LAMax,chnls[z],dest1,CMP_EQ);
//make it binary
threshold(dest1,dest1,0,1,THRESH_BINARY);
//the layer and thresh comparison
Mat dest2;
compare(chnls[z],Scalar(thresh),dest2,CMP_EQ);
//make it binary
threshold(dest2,dest2,0,1,THRESH_BINARY);
//get the nonzero indexes
bitwise_and(dest1,dest2,dest1);
vector<Point> reslts = cvFind(dest1,0,1);
cout<<"z"<<z;
for(int i=0;i<reslts.size();i++){
lx.push_back(reslts[i].x);
ly.push_back(reslts[i].y);
}
lr.push_back(rvals[z]);
}
/* for(int i=0;i<chnls.size();i++){
chnls[i].release();
}*/
result.push_back(lx);
result.push_back(ly);
result.push_back(lr);
return result;}
每当我运行我的代码时,都会在运行时出现以下错误。
HEAP[tester.exe]: Invalid Address specified to RtlFreeHeap( 01270000, 01694E80 )
错误出现在函数执行之后和进入下一条指令之前。
我搜索并发现这是由于一些野指针(指向无处的指针)错误。在查看调用堆栈时,会出现以下详细信息
tester.exe!std::allocator<cv::Mat>::deallocate(cv::Mat * _Ptr=0x01694e80, unsigned int __formal=5) Line 140 + 0x9 bytes C++
tester.exe!std::vector<cv::Mat,std::allocator<cv::Mat> >::_Tidy() Line 1139 C++
tester.exe!std::vector<cv::Mat,std::allocator<cv::Mat> >::~vector<cv::Mat,std::allocator<cv::Mat> >() Line 560 C++
tester.exe!lower_eyelid_icb(cv::Mat m={...}, cv::Point_<int> center={...}, float iRadius=150.00000) Line 413 + 0x2a bytes C++
tester.exe!getEyelid(cv::Mat src={...}, cv::Mat * dst=0x0013f75c, cv::Point_<int> pupil={...}, int pRadius=31, int iRadius=150) Line 858 + 0x48 bytes C++
tester.exe!main(int argc=2, char * * argv=0x01275b20) Line 248 + 0x55 bytes C++
tester.exe!__tmainCRTStartup() Line 582 + 0x17 bytes C
如果我们查看从底部开始的第五行,看起来在解除分配向量对象时出现了一些错误。
我在 for 循环中使用的代码中有一个向量对象。声明和用法如下。
vector<Mat> chnls;
split(myMat,chnls) ; //myMat is a 2 Dimensional 5 channel object.
这就是我使用 chlns 的方式
compare(LAMax,chnls[z],dest1,CMP_EQ);
然后将每个通道与 for 循环内的矩阵进行比较。
可能是什么问题呢?
我正在使用 VS2008 和 OpenCv 2.3。