我想用OpenCV繪製圍繞輪廓的邊界框。這是所有的圖像從攝像機實時搶下了實時應用,而以下是代碼向量超出範圍
的重要組成部分RTMotionDetector.h
vector<vector<Point>> *contours;
vector<vector<Point>> *contoursPoly;
RTMotionDetector.cpp
RTMotionDetector::RTMotionDetector(void)
{
current = new Mat();
currentGrey = new Mat();
canny = new Mat();
next = new Mat();
absolute = new Mat();
cam1 = new VideoCapture();
cam2 = new VideoCapture();
contours = new vector<vector<Point>>();
contoursPoly = new vector<vector<Point>>();
boundRect = new vector<Rect>();
}
double RTMotionDetector::getMSE(Mat I1, Mat I2)
{
Mat s1;
//Find difference
cv::absdiff(I1, I2, s1); // |I1 - I2|
imshow("Difference",s1);
//Do canny to get edges
cv::Canny(s1,*canny,30,30,3);
imshow("Canny",*canny);
//Find contours
findContours(*canny,*contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);
//System::Windows::Forms::MessageBox::Show(""+contours->size());
//Draw contours
drawContours(*current,*contours,-1,Scalar(0,0,255),2);
for(int i=0;i<contours->size();i++)
{
cv::approxPolyDP(Mat((*contours)[i]),(*contoursPoly)[i],3,true);
//boundRect[i] = boundingRect(contoursPoly[i]);
}
}
一旦下面的部分得到執行,我得到一個錯誤
cv::approxPolyDP(Mat((*contours)[i]),(*contoursPoly)[i],3,true);
這是我收到的錯誤。
如果我註釋掉的代碼,則沒有問題。我知道這是ArrayIndexOutOfBounds
問題,但我真的找不到修復程序。可能是因爲我是Windows編程新手。
contours
作爲一個指針而不是本地變量保留是非常重要的,因爲局部變量以一種令人難以置信的方式減慢了程序的速度。
請幫我解決這個問題。謝謝。
我從來沒有在一個地方見過這麼多'新'。如果你絕對必須有指針**,請使用智能指針**。 – chris
按重試,調試應用程序。有機會你沒有用任何東西來填充你的矢量。 –
@TheForest和TheTrees:我做到了。沒有什麼變化:( –