1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

openFrameworks opencv webcam crop

Posted at

openFrameworksでwebcamの画像をcropする with opencv

codes

main.cpp
# include "ofMain.h"
# include "ofApp.h"

//========================================================================
int main( ){

	ofSetupOpenGL(512,512, OF_WINDOW);			// <-------- setup the GL context

	// this kicks off the running of my app
	// can be OF_WINDOW or OF_FULLSCREEN
	// pass in width and height too:
	ofRunApp( new ofApp());

}
ofApp.cpp
# include "ofApp.h"

int cam_w;
int cam_h;
int target_w;
int target_h;

//--------------------------------------------------------------
void ofApp::setup(){
    cam_w = 320;
    cam_h = 240;
    target_w = 200;
    target_h = 200;

    vidGrabber.setVerbose(true);
    vidGrabber.initGrabber(cam_w,cam_h);
    vidGrabber.setup(cam_w,cam_h);

    colorImg_cam.allocate(cam_w,cam_h);
    colorImg.allocate(target_w,target_h);
	grayImage.allocate(target_w,target_h);
	grayBg.allocate(target_w,target_h);
	grayDiff.allocate(target_w,target_h);

	bLearnBakground = true;
	threshold = 80;
    ofGetWidth();
}

//--------------------------------------------------------------
void ofApp::update(){
	ofBackground(100,100,100);

    bool bNewFrame = false;

    vidGrabber.update();
    bNewFrame = vidGrabber.isFrameNew();

	if (bNewFrame){
        img.setFromPixels(vidGrabber.getPixels());
        colorImg_cam.setFromPixels(img.getPixels());
        img.crop((cam_w-target_w)/2, (cam_h-target_h)/2, target_w, target_h);
        colorImg.setFromPixels(img.getPixels());
        grayImage = colorImg;

		if (bLearnBakground == true){
			grayBg = grayImage;
			bLearnBakground = false;
		}

		grayDiff.absDiff(grayBg, grayImage);
		grayDiff.threshold(threshold);

		contourFinder.findContours(grayDiff, 20, target_w*target_h/2, 100, true);
        printf("value %d \n", contourFinder.nBlobs);
        
	}

}

//--------------------------------------------------------------
void ofApp::draw(){
    int ini_w = 50;
    int ini_h = 50;

	ofSetHexColor(0xffffff);
	colorImg_cam.draw(ini_w, ini_h);
	grayImage.draw(ini_w+(cam_w-target_w)/2, ini_h+(cam_h-target_h)/2);

    for (int i = 0; i < contourFinder.nBlobs; i++){
        contourFinder.blobs[i].draw(ini_w+(cam_w-target_w)/2, ini_h+(cam_h-target_h)/2);
    }
    
    ofSetHexColor(0xffffff);
    stringstream reportStr;
    reportStr << "bg subtraction and blob detection" << endl
              << "press ' ' to capture bg" << endl
    		  << "threshold " << threshold << " (press: +/-)" << endl
              << "num blobs found " << contourFinder.nBlobs << ", fps: " << ofGetFrameRate();
    ofDrawBitmapString(reportStr.str(), ini_w, ini_h+cam_h+50);

}

//--------------------------------------------------------------
void ofApp::keyPressed(int key){

	switch (key){
		case ' ':
			bLearnBakground = true;
			break;
		case '+':
			threshold ++;
			if (threshold > 255) threshold = 255;
			break;
		case '-':
			threshold --;
			if (threshold < 0) threshold = 0;
			break;
	}
}
ofApp.h
# pragma once

# include "ofMain.h"

# include "ofxOpenCv.h"

class ofApp : public ofBaseApp{

	public:
		void setup();
		void update();
		void draw();
		
		void keyPressed(int key);
		void keyReleased(int key);
		void mouseMoved(int x, int y );
		void mouseDragged(int x, int y, int button);
		void mousePressed(int x, int y, int button);
		void mouseReleased(int x, int y, int button);
		void mouseEntered(int x, int y);
		void mouseExited(int x, int y);
		void windowResized(int w, int h);
		void dragEvent(ofDragInfo dragInfo);
		void gotMessage(ofMessage msg);		

        ofVideoGrabber 		vidGrabber;

        ofxCvColorImage			colorImg_cam;
        ofxCvColorImage			colorImg;

        ofxCvGrayscaleImage 	grayImage;
		ofxCvGrayscaleImage 	grayBg;
		ofxCvGrayscaleImage 	grayDiff;

        ofxCvContourFinder 	contourFinder;

		int 				threshold;
		bool				bLearnBakground;

        ofImage img;

};

results

ref

setFromPixels
http://openframeworks.cc/documentation/graphics/ofImage/#show_setFromPixels

crop
http://openframeworks.cc/documentation/graphics/ofImage/#show_crop

copy from ofxcvcolorimage to ofimage
https://forum.openframeworks.cc/t/copy-from-ofxcvcolorimage-to-ofimage/4731

copy from ofimage to ofxcvcolorimage
http://mslgt.hatenablog.com/entry/2014/02/15/025614

cv::Mat
http://minus9d.hatenablog.com/entry/20130126/1359194404

pixel value
http://d.akiroom.com/2012-06/opencv-pixel-read-write-get-set/
http://www.wakayama-u.ac.jp/~chen/opencv/opencv2.html
http://opencv.jp/opencv-2svn/cpp/structural_analysis_and_shape_descriptors.html

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?