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

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

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

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

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

4945閲覧

processingでのカラートラッキングで指定した色を検出したい

marr

総合スコア7

OpenCV

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

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

1グッド

0クリップ

投稿2020/01/06 16:42

前提・実現したいこと

ProcessingでWebカメラで読み取った映像から色を検出して、トラッキングするということを実現したいです。
opencvのサンプルにあるHSVColorTrackingを参考に開発を行なっています。サンプルでは、クリックした部分と同じような色をトラッキングしているのですが、これを赤や青などの色を決め打ちで指定してトラッキングできるようにしたいです。

参考にしているサンプルコード

import gab.opencv.*; import processing.video.*; import java.awt.Rectangle; Capture video; OpenCV opencv; PImage src, colorFilteredImage; //PImage ArrayList<Contour> contours; // <1> Set the range of Hue values for our filter int rangeLow = 20; int rangeHigh = 35; void setup() { video = new Capture(this, 640, 480); video.start(); opencv = new OpenCV(this, video.width, video.height); contours = new ArrayList<Contour>(); size(1280, 480, P2D); } void draw() { // Read last captured frame if (video.available()) { video.read(); } // <2> Load the new frame of our movie in to OpenCV opencv.loadImage(video); // Tell OpenCV to use color information opencv.useColor(); src = opencv.getSnapshot(); // <3> Tell OpenCV to work in HSV color space. opencv.useColor(HSB); // <4> Copy the Hue channel of our image into // the gray channel, which we process. opencv.setGray(opencv.getH().clone()); // <5> Filter the image based on the range of // hue values that match the object we want to track. opencv.inRange(rangeLow, rangeHigh); // <6> Get the processed image for reference. colorFilteredImage = opencv.getSnapshot(); /////////////////////////////////////////// // We could process our image here! // See ImageFiltering.pde /////////////////////////////////////////// // <7> Find contours in our range image. // Passing 'true' sorts them by descending area. contours = opencv.findContours(true, true); // <8> Display background images image(src, 0, 0); image(colorFilteredImage, src.width, 0); // <9> Check to make sure we've found any contours if (contours.size() > 0) { // <9> Get the first contour, which will be the largest one Contour biggestContour = contours.get(0); // <10> Find the bounding box of the largest contour, // and hence our object. Rectangle r = biggestContour.getBoundingBox(); // <11> Draw the bounding box of our object noFill(); strokeWeight(2); stroke(255, 0, 0); rect(r.x, r.y, r.width, r.height); // <12> Draw a dot in the middle of the bounding box, on the object. noStroke(); fill(255, 0, 0); ellipse(r.x + r.width/2, r.y + r.height/2, 30, 30); } } void mousePressed() { color c = get(mouseX, mouseY); println("r: " + red(c) + " g: " + green(c) + " b: " + blue(c)); int hue = int(map(hue(c), 0, 255, 0, 180)); println("hue to detect: " + hue); rangeLow = hue - 5; rangeHigh = hue + 5; } ```ここに言語名を入力 ソースコード

試したこと

mousePressedで検出されている色を赤や青などの色にしたいです。
mousePressedの部分で得られた色情報がどこへ行って、検出されているのかわかりません。
また、赤色などを検出するといったプログラムをどこへ書けばいいのかわかりません。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

TN8001👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

カメラがないので未検証ですが、
color c = get(mouseX, mouseY);

color c = color(255, 0, 0);
に変えるとどうなるでしょうか?(一回どこかクリックしてください)

それで良いようであればmousePressed()の内容を、setup()にでも移せばいいんじゃないでしょうか。

投稿2020/01/07 11:50

TN8001

総合スコア9321

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

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

marr

2020/01/09 15:41

できました!! わかりやすく教えて頂けて助かりました。ありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問