質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
openFrameworks

openFrameworksは、C++で記述されたライブラリ群です。既存のライブラリの設定なしで使用できるため「糊」のようなツールキットと呼ばれています。簡単なコードだけで様々なグラフィックスやインタラクションをデザインすることが可能です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

812閲覧

OpenCV for Processingライブラリを用いて顔部分を交換したい

退会済みユーザー

退会済みユーザー

総合スコア0

openFrameworks

openFrameworksは、C++で記述されたライブラリ群です。既存のライブラリの設定なしで使用できるため「糊」のようなツールキットと呼ばれています。簡単なコードだけで様々なグラフィックスやインタラクションをデザインすることが可能です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

2グッド

3クリップ

投稿2017/07/30 05:16

###前提・実現したいこと
OpenCV for Processingライブラリを用いて顔部分を交換するシステムを作っています。参考にしているのは、以下の2つのサイトです。最終的に、参考サイト2の「「モナリザの微笑」と合成」という作品のように完全に顔の淵に合うように画像をマッピングできたら良いのですが、まずは顔の大まかな楕円をカメラからとって、そこに画像が描画されるシステムを目指しています。

参考サイト1
参考サイト2

###発生している問題・エラーメッセージ
以下のコードでは、画像が顔を覆う位置に描画されないことと、顔を動かしても画像が動かないことを改善したいです。また可能であれば、カメラから作成したメッシュを用いてその楕円に合わせて画像が配置されるようにしたいです。

###該当のソースコード

Processing

1import gab.opencv.*; 2import processing.video.*; 3import java.awt.*; 4 5Capture video; //ビデオキャプチャー 6OpenCV opencv; //OpenCV 7 8PImage img; 9 10void setup() { 11 size(640, 480); 12 //ビデオキャプチャー初期化 13 video = new Capture(this, 640/2, 480/2); 14 //OpenCV初期化(ビデオキャプチャーの半分のサイズ) 15 opencv = new OpenCV(this, 640/2, 480/2); 16 //顔の学習データを読み込み 17 opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE); 18 //ビデオキャプチャー開始 19 video.start(); 20 img = loadImage("face1.png"); 21} 22 23void draw() { 24 //二倍サイズで表示 25 scale(2); 26 //画像を読み込み 27 opencv.loadImage(video); 28 //カメラ画像を描画 29 image(video, 0, 0 ); 30 31 //顔を検出 32 Rectangle[] faces = opencv.detect(); 33 //検出した顔の周囲を四角形で描画 34 noFill(); 35 stroke(0, 255, 0); 36 strokeWeight(3); 37 for (int i = 0; i < faces.length; i++) { 38 //rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height); 39 image(img, faces[i].width/2, faces[i].height/2); 40 } 41} 42 43//キャプチャーイベント 44void captureEvent(Capture c) { 45 c.read(); 46}

###補足情報(言語/FW/ツール等のバージョンなど)
画像のface1.pngは以下のようなサイズのものを使っています。
イメージ説明

A-pZ👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Python使いなのでJavaの勝手はわかりませんが、画像を張り付ける系の関数には、おおむね関数名(画像ファイル,開始位置x,開始位置y,幅,高さ)というセットになっていると思います。
上のコードだとimage(img, faces[i].width/2, faces[i].height/2);となっていて、開始位置x,開始位置yの情報が抜けているように思われます。

ざーっとJavaの画像処理の関数を調べましたがPythonほど出てこなくてズバリな答えができませんが、そこに問題があるように思われます。

投稿2017/08/06 02:53

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/07 03:34

ご回答ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問