Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Change the code to make it works on webcam in openCV

I find a code which allows you to draw a blurring rectangle on the image

How can i change it to make it works with webcam

This is my code.

include <opencv2 core="" core.hpp=""> include <opencv2 highgui="" highgui.hpp=""> include <opencv2 imgproc="" imgproc.hpp="">

include <iostream>

using namespace std; using namespace cv;

bool selectObject = false; Rect selection; Point origin; int msize = 5; Mat image, blurredImage;

vector<rect> blurredAreas;

static bool doMosaic(Mat img, int msize) { for (int i = 0; i < img.cols - msize; i += msize) for (int j = 0; j < img.rows - msize; j += msize) { Rect r = Rect(i, j, msize, msize); Mat mosaic = img(r); mosaic.setTo(mean(mosaic)); } return true; }

static bool doBlur() { for (size_t i = 0; i< blurredAreas.size(); i++) { Mat roi = blurredImage(selection); //GaussianBlur(roi,roi,Size(),5,5); doMosaic(roi, msize); } imshow("Demo", blurredImage); return true; }

static void onMouse(int event, int x, int y, int, void*) { switch (event) { case CV_EVENT_LBUTTONDOWN: origin = Point(x, y); selectObject = true; break; case CV_EVENT_LBUTTONUP: { selectObject = false; blurredAreas.push_back(selection); doBlur(); break; } }

if (selectObject)
{
    selection.x = MIN(x, origin.x);
    selection.y = MIN(y, origin.y);
    selection.width = std::abs(x - origin.x) + 1;
    selection.height = std::abs(y - origin.y) + 1;
    selection &= Rect(0, 0, image.cols, image.rows);

    if (selection.width > 0 && selection.height > 0)
    {
        Mat blurredImagecopy;
        blurredImage.copyTo(blurredImagecopy);
        Mat roi = blurredImagecopy(selection);
        bitwise_not(roi, roi);
        imshow("Demo", blurredImagecopy);
    }
}

}

int main(int argc, char** argv) { image = imread("c:/aa/Adel.png"); if (image.empty()) // Check for invalid input { cout << "Could not open or find the image" << std::endl; return -1; } image.copyTo(blurredImage);

namedWindow("Demo");
setMouseCallback("Demo", onMouse);

imshow("Demo", image);

while (true)
{
    int key = waitKey(0);

    if (key == 27)
        break;

    if (key == 's') // saves result image
    {
        imwrite("result.jpg", blurredImage);
    }

    if (key == 'i') // for increasing mosaic size
    {
        msize += 5;
        image.copyTo(blurredImage);
        doBlur();
    }

    if (key == 'd') // key 'd'  for decreasing mosaic size
    {
        msize = msize == 5 ? 5 : msize - 5;
        image.copyTo(blurredImage);
        doBlur();
    }

    if (key == 32) // space key for clear blurred areas
    {
        blurredAreas.clear();
        image.copyTo(blurredImage);
        doBlur();
    }
}
return 0;

}

Change the code to make it works on webcam in openCV

I find a code which allows you to draw a blurring rectangle on the image

How can i change it to make it works with webcam

This is my code.

include <opencv2 core="" core.hpp="">
<opencv2/core/core.hpp>
include <opencv2 highgui="" highgui.hpp="">
<opencv2/highgui/highgui.hpp>
include <opencv2 imgproc="" imgproc.hpp="">

<opencv2/imgproc/imgproc.hpp> include <iostream>

<iostream> using namespace std; using namespace cv;

cv; bool selectObject = false; Rect selection; Point origin; int msize = 5; Mat image, blurredImage;

vector<rect> blurredAreas;

blurredImage; vector<Rect> blurredAreas; static bool doMosaic(Mat img, int msize) { for (int i = 0; i < img.cols - msize; i += msize) for (int j = 0; j < img.rows - msize; j += msize) { { Rect r = Rect(i, j, msize, msize); Mat mosaic = img(r); mosaic.setTo(mean(mosaic)); } } return true; }

} static bool doBlur() { for (size_t i = 0; i< blurredAreas.size(); i++) { Mat roi = blurredImage(selection); //GaussianBlur(roi,roi,Size(),5,5); doMosaic(roi, msize); } imshow("Demo", blurredImage); return true; }

} static void onMouse(int event, int x, int y, int, void*) { switch (event) { case CV_EVENT_LBUTTONDOWN: origin = Point(x, y); selectObject = true; break; case CV_EVENT_LBUTTONUP: { selectObject = false; blurredAreas.push_back(selection); doBlur(); break; } }

}

    if (selectObject)
{
    {
        selection.x = MIN(x, origin.x);
     selection.y = MIN(y, origin.y);
     selection.width = std::abs(x - origin.x) + 1;
     selection.height = std::abs(y - origin.y) + 1;
     selection &= Rect(0, 0, image.cols, image.rows);

     if (selection.width > 0 && selection.height > 0)
    {
    {
            Mat blurredImagecopy;
         blurredImage.copyTo(blurredImagecopy);
         Mat roi = blurredImagecopy(selection);
         bitwise_not(roi, roi);
         imshow("Demo", blurredImagecopy);
    }
}

}

} } } int main(int argc, char** argv) { image = imread("c:/aa/Adel.png"); if (image.empty()) // Check for invalid input { cout << "Could not open or find the image" << std::endl; return -1; } image.copyTo(blurredImage);

image.copyTo(blurredImage);

    namedWindow("Demo");
 setMouseCallback("Demo", onMouse);

 imshow("Demo", image);

 while (true)
{
    {
        int key = waitKey(0);

     if (key == 27)
         break;

     if (key == 's') // saves result image
    {
    {
            imwrite("result.jpg", blurredImage);
    }

    }

        if (key == 'i') // for increasing mosaic size
    {
    {
            msize += 5;
         image.copyTo(blurredImage);
         doBlur();
    }

    }

        if (key == 'd') // key 'd'  for decreasing mosaic size
    {
    {
            msize = msize == 5 ? 5 : msize - 5;
         image.copyTo(blurredImage);
         doBlur();
    }

    }

        if (key == 32) // space key for clear blurred areas
    {
    {
            blurredAreas.clear();
         image.copyTo(blurredImage);
         doBlur();
    }
}
    }
    }
    return 0;
}

}