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
ローカル変数はプログラムを信じられないほど遅くするため、ローカル変数ではなくポインターのままにしておく ことが非常に重要です。