OpenCVを使った顔の検出 アプリケーションエラー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
てぃうす

OpenCVを使った顔の検出 アプリケーションエラー

#1

投稿記事 by てぃうす » 14年前

初めまして、プログラミング始めたての初心者なのですが
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


何か原因と思われるものがわかりましたらご指摘のほどよろしくお願いします。

てぃうす

Re: OpenCVを使った顔の検出 アプリケーションエラー

#2

投稿記事 by てぃうす » 14年前

[quote="てぃうす"]
すみません。コードは以下の通りです。
3.18 顔を検出する

コード:

#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);
}

よろしくお願いします。

nanasi

Re: OpenCVを使った顔の検出 アプリケーションエラー

#3

投稿記事 by nanasi » 13年前

自分も同じ悩みを抱えてここにたどり着きました。

いろいろ調べると、デバッグモードで動作させているときだけ起こるようです。
リリースモードで動作させたら動いて感動しました。

ちなみに、デバッグモードで動作するようにする方法が書かれているサイトを発見しました。奇特な方がいらっしゃいますね。
http://d.hatena.ne.jp/drunkennessimi/20 ... 1345634529

こちらは動作確認していません。

閉鎖

“C言語何でも質問掲示板” へ戻る