openFrameworksで画像処理

Pocket
LINEで送る

昔に作ったoFでモザイク処理を作ってたのでアップしておきます。
ドラックした箇所はモザイクがかからないようにしています。バグっていたらすいません。

下の画像だと右上のところかな。

ソースはこんな感じです。

#include "testApp.h"

#define	WIDTH 960			// 出力サイズ(幅)
#define	HEIGHT 640			// 出力サイズ(縦)

#define MOSAIC_SIZE 20		// 個々のモザイクのサイズ
#define	CLEAR_SIZE	40		// モザイクにならない箇所の範囲

//--------------------------------------------------------------
void testApp::setup(){
    imageWidth = WIDTH;
    imageHeght = HEIGHT;
	mouseX = 20;
	mouseY = -40;
    inputImage.initGrabber(imageWidth, imageHeght);
    ofSetFrameRate(30);
}
//--------------------------------------------------------------
void testApp::update(){
    inputImage.grabFrame();
}
//--------------------------------------------------------------
void testApp::draw(){
    inputImage.draw(0, 0);
	
    unsigned char *pixels = inputImage.getPixels();
    
	for (int i = 0; i < imageWidth; i += MOSAIC_SIZE){
		for (int j = 0; j < imageHeght; j += MOSAIC_SIZE){
			// クリックしたところを中心にモザイクを外す
			if( ((j < (mouseY - CLEAR_SIZE)) || ((mouseY + CLEAR_SIZE < j)) || 
				((i < (mouseX - (CLEAR_SIZE))) || (mouseX + (CLEAR_SIZE) < i))) ){
				int r = pixels[j * imageWidth * 3 + i * 3];
				int g = pixels[j * imageWidth * 3 + i * 3 + 1];
				int b = pixels[j * imageWidth * 3 + i * 3 + 2];
				ofSetColor(r, g, b);
				ofFill();
				ofRect(i, j, MOSAIC_SIZE, MOSAIC_SIZE);
				ofNoFill();
				ofSetColor(255, 255, 255);
			}
        }
    }
}

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

}

//--------------------------------------------------------------
void testApp::keyReleased(int key){

}

//--------------------------------------------------------------
void testApp::mouseMoved(int x, int y ){

}

//--------------------------------------------------------------
void testApp::mouseDragged(int x, int y, int button){
	// クリックした座標の取得
	mouseX = x;
	mouseY = y;
}

//--------------------------------------------------------------
void testApp::mousePressed(int x, int y, int button){
	// ドラッグしている座標の取得
	mouseX = x;
	mouseY = y;
}

//--------------------------------------------------------------
void testApp::mouseReleased(int x, int y, int button){
	// マウスを放したタイミングで再度モザイク処理をするため初期化
	mouseX = 20;
	mouseY = -40;
}

 
これから昔作ったものをちょいちょい上げていきます。

おすすめ書籍

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください