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

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

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

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

C++

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

Q&A

解決済

1回答

998閲覧

OpenCVでのエラー・座標の取得

iisa

総合スコア18

OpenCV

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

C++

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

0グッド

0クリップ

投稿2018/02/13 06:51

OpenCVを用いて、物体の座標の座標を取得しようと思っています。
BGR→HSV変換後、赤色以外を白、赤色の部分を黒に変換し、その白黒に変換するときに、座標をcoutで出力させようというプログラムです。

#define _CRT_SECURE_NO_WARNINGS #define _USE_MATH_DEFINES #include <iostream> #include <string> #include <cmath> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; string win_src = "src"; string win_dst = "dst"; int main() { string file_src = "picture_input.png";//入力画像のファイル名 string file_dst = "picture_output.png";//出力画像のファイル名 Mat img_src = imread(file_src, 1);//入力画像(カラー)の読み込み //Mat img_src=imread(file_src,0) //入力画像(グレー)の読み込み Mat img_dst; if (!img_src.data) { cout << "error" << endl; return -1; } //ここに核となる処理を記述する //--HSVに変換--// Mat hsv_image; cvtColor(img_src, hsv_image, CV_BGR2HSV); uchar hue, sat, val; Mat red_image = Mat(Size(img_src.cols, img_src.rows), CV_8UC1);//colsが横、rowsが縦 for (int y=0;y<img_src.rows;y++) for (int x = 0; x < img_src.cols; x++) { //----HSVへの分解----// hue = hsv_image.at<Vec3b>(y, x)[0]; sat = hsv_image.at<Vec3b>(y, x)[1]; val = hsv_image.at<Vec3b>(y, x)[2]; //----赤の検出----// if ((hue < 8 || hue>168) && sat > 100) red_image.at<uchar>(y, x) = 0; cout << x << "," << y << endl; else red_image.at<uchar>(y, x) = 255; } //核終了// //処理結果の保存とか imwrite(file_dst, red_image); system("pause");//キー入力待ち return 0; }

この、

//----赤の検出----// if ((hue < 8 || hue>168) && sat > 100) red_image.at<uchar>(y, x) = 0; cout << x << "," << y << endl; else red_image.at<uchar>(y, x) = 255; } //核終了//

のelseのところで
「ステートメントが必要です」「elseとifが一致しません」とエラーがでました。
しかし、elseとifは一致していると思うのですが・・・どこを改良すべきなのでしょうか。
また、これ以外に物体(黒色)の座標を取得する方法があれば教えてください。
プログラミング初心者なので、初歩的な所で間違えているのかもしれません。
教えて頂ければ幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

処理が複数行に渡る場合は、{}を付けねばなりません。
次のように解釈されてしまっています。

C++

1if ((hue < 8 || hue>168) && sat > 100) { 2 red_image.at<uchar>(y, x) = 0; 3} 4cout << x << "," << y << endl; 5else { 6 red_image.at<uchar>(y, x) = 255; 7}

ほら、対応してませんね?

投稿2018/02/13 06:54

LouiS0616

総合スコア35660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問