We are about to switch to a new forum software. Until then we have removed the registration on this forum.
Hello everybody! I have a problem, i'm new to processing. I managed to use the "find contours" feature of the OpenCV library in a progressive way, in this code, I apply the effect on a picture I have saved on my pc. Now I want to save a frame from the webcam and apply the effect, everything on processing. How can I add the code? Please help! Thank you very much to everybody who would help me out
import gab.opencv.*;
PImage src;
OpenCV opencv;
ArrayList<Contour> contours;
int pointsTot;
int pointsCurr;
float countourApproximation;
////////////////////////////////////////////////////////////////////////////////
void setup()
{
size( 1080, 720, P2D );
colorMode( HSB, 360, 100, 100 );
opencv = new OpenCV( this, 1080, 720 );
src = loadImage("room.jpg");
countourApproximation = 2;
resetContours();
}
////////////////////////////////////////////////////////////////////////////////
void resetContours()
{
opencv.loadImage( src );
opencv.gray();
opencv.blur(5);
opencv.threshold(60);
// tutte le operazioni possibili sono elencate e descritte in:
// http://atduskgreg.github.io/opencv-processing/reference/gab/opencv/OpenCV.html
// [vedi "Method Summary"]
contours = opencv.findContours();
pointsTot = 0;
for (Contour contour : contours) {
contour.setPolygonApproximationFactor(countourApproximation);
pointsTot += contour.getPolygonApproximation().getPoints().size();
}
// pointsCurr = pointsTot-1;
pointsCurr = 1;
}
////////////////////////////////////////////////////////////////////////////////
void draw()
{
// background( 0 );
if (pointsCurr < pointsTot-1) {
noTint();
} else {
tint( 60 );
}
image( src, 0, 0 );
noFill();
strokeWeight(3);
int pointsCount = 0; // numero di punti (dei segmenti) visualizzati
for (int c=0; c<contours.size(); ++c) {
Contour contour = contours.get( c );
ArrayList<PVector> points = contour.getPolygonApproximation().getPoints();
float h = map( c, 0, contours.size(), 0, 360 );
beginShape();
for (int p=0; p<points.size(); ++p) {
if (pointsCount < pointsCurr) {
PVector point = points.get( p );
float s = map( p, 0, points.size(), 20, 100 );
stroke( h, s, 100 );
vertex( point.x, point.y );
// curveVertex( point.x, point.y );
++pointsCount;
} else {
break;
}
}
endShape();
}
if (pointsCurr < pointsTot-1) {
++pointsCurr;
}
}
////////////////////////////////////////////////////////////////////////////////
void mousePressed()
{
countourApproximation = exp( random(3.5) );
resetContours(); // cerca di nuovo i contorni e reimposta le variabili per la visualizzazione
}