画像を読み込んで画像を検出し、その画像に矩形でマークします。 私はVisual Studio 2012とOpenCV 2.4.9を使用します。OpenCV CascadeClassifierを使用した顔検出:.exeがブレークポイントをトリガーしました
OpenCVが提供するcv :: CascadeClassifierとhaarcascade_frontalface_default.xmlを使用します。私のコードです:
#include <opencv2/imgproc/imgproc.hpp> // Gaussian Blur
#include <opencv2/core/core.hpp> // Basic OpenCV structures (cv::Mat, Scalar)
#include <opencv2/highgui/highgui.hpp> // OpenCV window I/O
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <stdio.h>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
//load image, in this case it's allready gray
Mat img = imread("H:/BioID/BioID-FaceDatabase-V1.2/BioID_0000.pgm");
Mat grayImg;
cvtColor(img, grayImg, CV_BGR2GRAY);
//create vector of rectangles that will represent the faces
vector<Rect> faces;
CascadeClassifier* faseCascade = new CascadeClassifier("C:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_default.xml");
faseCascade->detectMultiScale(grayImg, faces);
//draw rectangle on img; param: image, rectangle, color
cv::rectangle(img, faces[0],Scalar(255,0,0),2);
//display image
imshow("image", img);
waitKey(0);
return 0;
}
プログラムは正常に実行され、最終的に顔の周りに青い矩形の画像が表示されます。しかし、私がキーを押してプログラムが閉じようとすると、それは壊れます。
出力を示しています。
HEAP[myProgram.exe]: Invalid address specified to RtlValidateHeap(00000004F9F30000, 00000004FC23ECE0)
myProgram.exe has triggered a breakpoint.
私はdetectMultiscale機能とドロー矩形関数をコメントアウトした場合。プログラムはエラーなく実行されます。
誰かがアイデアを持っていますか?
ありがとうございました!
戻す前にdeallocate faseCascadeを追加できますか? – saurabheights
OpenCVの古いバージョンを使用する特別な理由はありますか?デバッグモードまたはリリースモード?どのライブラリにリンクしましたか? –
@saurabheights返す前に 'delete faceCascade'を実行すると、前と同じError Msgが返されます。プログラムの最後ではなく、deleteコマンドでのみ取得されます。 – elHam