前提・実現したいこと
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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/09 15:41