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