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

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

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

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

Q&A

解決済

1回答

3211閲覧

C++のvector型をreturnで返す方法

kotetu

総合スコア34

C++

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

0グッド

0クリップ

投稿2018/02/14 05:26

編集2018/02/14 07:03

閲覧有難うございます。

サンプルコードにある引数"faces"をreturnしたいのですが、単純に返せないですよね?

今考えている方法としては、vector<Rect>のfacesをMatに変換できないかを考えています。

一応、載せておきます。

C++

1#include "opencv2/highgui.hpp" 2#include "opencv2/imgproc.hpp" 3#include "opencv2/opencv.hpp" 4#include "opencv2/highgui/highgui.hpp" 5#include <iostream> 6using namespace std; 7using namespace cv; 8 9std::vector<cv::Rect> detectFaceInImage(Mat &image,string &cascade_file){//変更箇所 10 CascadeClassifier cascade; 11 cascade.load(cascade_file); 12 13 vector<Rect> faces; 14 cascade.detectMultiScale(image, faces, 1.1,3,0,Size(20,20)); 15 16 for (int i = 0; i < faces.size(); i++){ 17 rectangle(image, Point(faces[i].x,faces[i].y),Point(faces[i].x + faces[i].width,faces[i].y + faces[i].height),Scalar(0,200,0),3,CV_AA); 18 } 19 return faces; 20} 21 22int main(int argc, const char *argv[]) 23{ 24 Mat image = imread(argv[1]); 25 string filename = argv[2]; 26 vector<cv::Rect> detectFaceImage = detectFaceInImage(image, filename);//変更箇所 27 imshow("detect face",detectFaceImage); 28 waitKey(0); 29 30 return 0; 31}

これだとコンパイルが通るのは通るのですが、次のとおりになります。

C++

1terminate called after throwing an instance of 'std::logic_error' 2 what(): basic_string::_S_construct null not valid 3中止 (コアダンプ)

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

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

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

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

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

LouiS0616

2018/02/14 05:32 編集

imageは返さなくてもよいということでしょうか?それとも両方返したい?
kotetu

2018/02/14 05:42

顔検出の際のx座標とy座標を取得したいと考えています。
LouiS0616

2018/02/14 07:07

コマンドライン引数は適切に与えていますか。
guest

回答1

0

ベストアンサー

字義通り、『C++のvector型をreturnで返す方法』

C++

1std::vector<cv::Rect> 2 detectFaceInImage(cv::Mat& image, const std::string& cascade_file) { 3 4 ... 5 6 return faces; 7}

単純です。
コンパイラが充分新しければ、戻り値の型をauto宣言でき、さらに楽です。

投稿2018/02/14 05:43

編集2018/02/14 06:53
LouiS0616

総合スコア35660

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

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

LouiS0616

2018/02/14 06:54

一か所誤植に気付いたので修正しました。 (strin ⇒ string) これでも通らないですか?
kotetu

2018/02/14 07:01

コンパイルは通りましたが、実行の際にエラーが出るようになりました。
LouiS0616

2018/02/14 07:01

...? vectorを返したかったのになんでimageを返すのです? 関数の書き方はわかっていますか?
Chironian

2018/02/14 07:33

横から失礼します。 コマンドラインパラメータを与えていないだけということはないでしょうか? 画像ファイルのパスとカスケード・ファイルのパスの2つを与える必要があります。 もし、「カスケード・ファイル」が解らない場合は、別途質問された方が良いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問