OpenCVを使った顔の検出 アプリケーションエラー
Posted: 2012年2月22日(水) 22:16
初めまして、プログラミング始めたての初心者なのですが
OpenCV2プログラミングブックのサンプルコードを順々に実行していましたら
顔検出のところで息詰まってしまったため、質問させていただきます。
3.18 顔を検出する
code
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/highgui/highgui.hpp>
int
main(int argc, char *argv[])
{
const char *imagename = argc > 1 ? argv[1] : "lena.jpg";
cv::Mat img = cv::imread(imagename, 1);
if(!img.data) return -1;
double scale = 4.0;
cv::Mat gray, smallImg(cv::saturate_cast<int>(img.rows/scale), cv::saturate_cast<int>(img.cols/scale), CV_8UC1);
// グレースケール画像に変換
cv::cvtColor(img, gray, CV_BGR2GRAY);
// 処理時間短縮のために画像を縮小
cv::resize(gray, smallImg, smallImg.size(), 0, 0, cv::INTER_LINEAR);
cv::equalizeHist( smallImg, smallImg);
// 分類器の読み込み
std::string cascadeName = "C:\OpenCV2.3\data\haarcascades\haarcascade_frontalface_alt.xml"; // Haar-like
//std::string cascadeName = "./lbpcascade_frontalface.xml"; // LBP
cv::CascadeClassifier cascade;
if(!cascade.load(cascadeName))
return -1;
std::vector<cv::Rect> faces;
// マルチスケール(顔)探索
// 画像,出力矩形,縮小スケール,最低矩形数,(フラグ),最小矩形
cascade.detectMultiScale(smallImg, faces,
1.1, 2,
CV_HAAR_SCALE_IMAGE
,
cv::Size(30, 30));
// 結果の描画
std::vector<cv::Rect>::const_iterator r = faces.begin();
for(; r != faces.end(); ++r) {
cv::Point center;
int radius;
center.x = cv::saturate_cast<int>((r->x + r->width*0.5)*scale);
center.y = cv::saturate_cast<int>((r->y + r->height*0.5)*scale);
radius = cv::saturate_cast<int>((r->width + r->height)*0.25*scale);
cv::circle( img, center, radius, cv::Scalar(80,80,255), 3, 8, 0 );
}
cv::namedWindow("result", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::imshow( "result", img );
cv::waitKey(0);
}
/code
ビルドは正常終了とでるのですが、アプリケーションエラーが発生し、
「 アプリケーションを正しく起動できませんでした(0xc000000d)。
[OK]をクリックしてアプリケーションを閉じてください。 」
と表示されてしまい顔検出ができませんでした。
また同様にサンプルコード3.19と3.20でも同じエラーが発生してしまいました。
環境
windows7 64bit Intel Core i3
Visual Studio 2010 (アカデミック)
OpenCV2.3
サンプルコードのURL
http://book.mycom.co.jp/support/pc/open ... index.html
何か原因と思われるものがわかりましたらご指摘のほどよろしくお願いします。
OpenCV2プログラミングブックのサンプルコードを順々に実行していましたら
顔検出のところで息詰まってしまったため、質問させていただきます。
3.18 顔を検出する
code
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/highgui/highgui.hpp>
int
main(int argc, char *argv[])
{
const char *imagename = argc > 1 ? argv[1] : "lena.jpg";
cv::Mat img = cv::imread(imagename, 1);
if(!img.data) return -1;
double scale = 4.0;
cv::Mat gray, smallImg(cv::saturate_cast<int>(img.rows/scale), cv::saturate_cast<int>(img.cols/scale), CV_8UC1);
// グレースケール画像に変換
cv::cvtColor(img, gray, CV_BGR2GRAY);
// 処理時間短縮のために画像を縮小
cv::resize(gray, smallImg, smallImg.size(), 0, 0, cv::INTER_LINEAR);
cv::equalizeHist( smallImg, smallImg);
// 分類器の読み込み
std::string cascadeName = "C:\OpenCV2.3\data\haarcascades\haarcascade_frontalface_alt.xml"; // Haar-like
//std::string cascadeName = "./lbpcascade_frontalface.xml"; // LBP
cv::CascadeClassifier cascade;
if(!cascade.load(cascadeName))
return -1;
std::vector<cv::Rect> faces;
// マルチスケール(顔)探索
// 画像,出力矩形,縮小スケール,最低矩形数,(フラグ),最小矩形
cascade.detectMultiScale(smallImg, faces,
1.1, 2,
CV_HAAR_SCALE_IMAGE
,
cv::Size(30, 30));
// 結果の描画
std::vector<cv::Rect>::const_iterator r = faces.begin();
for(; r != faces.end(); ++r) {
cv::Point center;
int radius;
center.x = cv::saturate_cast<int>((r->x + r->width*0.5)*scale);
center.y = cv::saturate_cast<int>((r->y + r->height*0.5)*scale);
radius = cv::saturate_cast<int>((r->width + r->height)*0.25*scale);
cv::circle( img, center, radius, cv::Scalar(80,80,255), 3, 8, 0 );
}
cv::namedWindow("result", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::imshow( "result", img );
cv::waitKey(0);
}
/code
ビルドは正常終了とでるのですが、アプリケーションエラーが発生し、
「 アプリケーションを正しく起動できませんでした(0xc000000d)。
[OK]をクリックしてアプリケーションを閉じてください。 」
と表示されてしまい顔検出ができませんでした。
また同様にサンプルコード3.19と3.20でも同じエラーが発生してしまいました。
環境
windows7 64bit Intel Core i3
Visual Studio 2010 (アカデミック)
OpenCV2.3
サンプルコードのURL
http://book.mycom.co.jp/support/pc/open ... index.html
何か原因と思われるものがわかりましたらご指摘のほどよろしくお願いします。