2021-08-16
Camera, ComputerVision, Opencv, Python, Sensor
openFrameworks opencv webcam crop
openFrameworksでwebcamの画像をcropする with opencv
codes
x#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());
}
xxxxxxxxxx#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; }}
xxxxxxxxxx#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
http://openframeworks.cc/documentation/ofxOpenCv/ofxCvGrayscaleImage/#show_convertToRange
http://openframeworks.cc/documentation/ofxOpenCv/ofxCvGrayscaleImage/#show_threshold
http://openframeworks.cc/documentation/video/ofVideoGrabber/#show_listDevices