質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1273閲覧

VisualStudioをC++に変換

kotetu

総合スコア34

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/02/12 12:45

閲覧ありがとうございます。

まず、やりたいことは、

  • 顔認識によって得られた矩形領域の下半分をROI (Region of Interest)として取り出す

これです。

なので、OpenCVでエッジ検出を参考に、C++でプログラムをビルドしてるのですが、

C++

1cv::Rect halfRect = faceRect; 2 halfRect.y += faceRect.height/2; 3 halfRect.height = faceRect.height/2 - 1; // under half of face 4 cv::Mat roi2 = gray(halfRect); 5 cascade3.detectMultiScale(roi2, founds3, 1.1, 0, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30)); 6 const int smile_neighbors = (int)founds3.size(); 7 static int max_neighbors=-1; 8 static int min_neighbors=-1; 9 if (min_neighbors == -1) min_neighbors = smile_neighbors; 10 max_neighbors = MAX(max_neighbors, smile_neighbors); 11 float intensityZeroOne = ((float)smile_neighbors - min_neighbors) / (max_neighbors - min_neighbors + 1); 12 cv::Rect meter(faceRect.x, faceRect.y-20, (int)100*intensityZeroOne, 20); 13 cv::rectangle(image, meter, cv::Scalar(255, 0, 0), -1); 14 cv::Rect meterFull(faceRect.x, faceRect.y-20, 100, 20); 15 cv::rectangle(image, meterFull, cv::Scalar(255, 0, 0), 1);

ここの部分だと機能が多いので

C++

1for (auto faceRect: founds) 2{ 3 cv::Mat roi = gray(faceRect); 4 cascade2.detectMultiScale(roi, founds2, 1.1, 2, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30)); 5 for (auto eyeRect: founds2) { 6 cv::Rect rect(faceRect.x + eyeRect.x, faceRect.y + eyeRect.y, eyeRect.width, eyeRect.height); 7 } 8 cv::Rect halfRect = faceRect; 9 halfRect.y += faceRect.height/2; 10 halfRect.height = faceRect.height/2 - 1; // under half of face 11}

これだけで顔の下半分を取り出せていると言っても大丈夫なのでしょうか?

毎日、勉強をしている素人ですが、何卒よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

目の検出部分はごっそりいらないのでは?以下、未検証ですが参考までに。

C++

1for(auto& faceRect: founds) { 2 cv::Rect halfRect{ 3 faceRect.x, 4 faceRect.y + faceRect.height / 2, 5 faceRect.width, 6 faceRect.height / 2 7 }; 8 9 // halfRectを使ったなんかの処理 10}

タイトルは誤植でしょうか。

投稿2018/02/12 12:58

LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kotetu

2018/02/13 02:32

いつもありがとうございます。 試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問