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

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

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

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

OpenCV

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

2673閲覧

OpenCVによる異物検出ができません

satosato

総合スコア20

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

OpenCV

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/11/21 07:00

Javaのプログラムで, OpenCVを用いて異物検出をしたいのですが, うまく動作しません。具体的には, カメラに異物が映っている間, 異物を矩形で囲むという動作です。下にソースコードの画像処理に該当する部分を示します。

Java

1public void run(){ 2 3 if( capture.isOpened() ){ 4 capture.read(img_fg); 5 while( true ){ 6 capture.read(img_bg); 7 8 if( !img_bg.empty() ){ 9 10 // グレースケール化 11 Imgproc.cvtColor(img_fg, gray_fg, Imgproc.COLOR_BGRA2GRAY); 12 Imgproc.cvtColor(img_bg, gray_bg, Imgproc.COLOR_BGRA2GRAY); 13 14 Core.absdiff(gray_fg, gray_bg, img_df); // 差分 15 Imgproc.threshold(img_df, img_bi, 100, 255, Imgproc.THRESH_BINARY); // 差分の二値化 16 17           Core.bitwise_and(img_fg, img_bi, img_mot); // 対象の切り出し 18 19 // 輪郭検出 20 Imgproc.findContours(img_mot, contours, hierarchy, 21 Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_TC89_L1); 22 23 Imgproc.drawContours(img_bg, contours, -1, new Scalar(0, 0, 255), 1); 24 25 p_cam.setimage(img_bg); 26 p_cam.repaint();

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

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

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

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

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

guest

回答1

0

findContoursの第一引数をimg_biにしたら改善しませんか?

投稿2019/11/21 07:24

fana

総合スコア11654

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

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

satosato

2019/11/26 00:06 編集

輪郭の描写はできました. ありがとうございます. ここから輪郭の描写ではなく, 対象を矩形で囲むようにしたいのですが, なにかアドバイス等がありましたらお願いします.
fana

2019/11/26 01:07

OpenCVにboundingRect()という関数があったかと思います(が,findContours()ってあまり使ったことがないので,結果データをそのままの形でboundingRect()に渡せるのかどうか知りません). まぁ輪郭の座標群が得られているならその中での xとy の最大最小を求めれば良いだけですから,自前でやってしまっても良いのではないでしょうか.
satosato

2019/11/28 00:02

ありがとうございます. 重ねて質問をすみません. アドバイス通りに輪郭の座標群を用いて矩形の描写を試みたのですが, そもそも座標群の取り扱い方がよくわからないです.プログラム上では private List<MatOfPoint> contours=new ArrayList<MatOfPoint>(); と記述しているので, おそらくここで座標群の取得?をしていると思うのですが, もしよろしければ詳しく教えて下さい.
fana

2019/11/28 01:44

OpenCVのドキュメントでは findContours で得られるcontoursは > Detected contours. Each contour is stored as a vector of points (e.g. std::vector<std::vector<cv::Point> >) とされています. e.g.の部分はC++における型なので,contoursの型がJavaでは具体的にどんな型になるのかは知りませんが, MatOfPointというのが「点の集合」なのであれば,単純にMatOfPointの各要素が輪郭を構成する点の座標なのではないでしょうか.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問