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

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

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

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

Q&A

0回答

638閲覧

JavaFXを用いた映像から顔を検出しモザイクをかけるプログラム

tabasu

総合スコア6

Java

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

0グッド

0クリップ

投稿2017/12/28 07:47

編集2018/01/04 06:48

###前提・実現したいこと
JavaFXを用いた映像から顔を検出し顔にモザイクをかけるプログラムを作成しています。
実行するとウィンドウが出てきてそこにカメラが映している映像が流れ、顔の部分に長方形が出るようになっています。今回お聞きしたいのは、この映像をモザイクにするメソッドを作成しモザイク処理ができるようにしたいです。よろしくお願いします。
###該当のソースコード
//記述言語 java

import java.io.ByteArrayInputStream; import javafx.animation.AnimationTimer; import javafx.application.Application; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.image.Image; import javafx.stage.Stage; import javafx.stage.WindowEvent; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.MatOfByte; import org.opencv.core.MatOfRect; import org.opencv.core.Point; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.videoio.VideoCapture; import org.opencv.videoio.Videoio; import org.opencv.imgproc.Imgproc; import org.opencv.objdetect.CascadeClassifier; public class NewClass extends Application{ private int camWidth; private int camHeight; VideoCapture capture; Canvas canvas; GraphicsContext gc; Stage stage; AnimationTimer timer; @Override public void start(Stage stage){ this.stage=stage; initOpenCv(); canvas = new Canvas(camWidth,camHeight); gc = canvas.getGraphicsContext2D(); Group group = new Group(canvas); Scene scene = new Scene(group,camWidth,camHeight); stage.setScene(scene); stage.show(); timer = new CameraAnimation(); timer.start(); } private static Mat dObj(CascadeClassifier objDetector,Mat src){ Mat dst = src.clone(); MatOfRect objDetections = new MatOfRect(); objDetector.detectMultiScale(dst,objDetections); System.out.println("Detected"+objDetections.toArray().length+"face"); if(objDetections.toArray().length<=0) return src; for(Rect rect : objDetections.toArray()){ Imgproc.rectangle(dst,new Point(rect.x,rect.y), new Point(rect.x+rect.width,rect.height), new Scalar(0,0,255),2); } return dst; } public void initOpenCv(){ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); capture = new VideoCapture(0); System.out.println("Camera open: " + capture.isOpened()); camWidth = (int)capture.get(Videoio.CAP_PROP_FRAME_WIDTH); camHeight = (int)capture.get(Videoio.CAP_PROP_FRAME_HEIGHT); stage .setOnCloseRequest(new EventHandler<WindowEvent>(){ @Override public void handle(WindowEvent event){ timer.stop(); capture.release(); System.out.println("Camera released"); } }); } public class CameraAnimation extends AnimationTimer{ Mat capImg = new Mat(); Mat dst = new Mat(); @Override public void handle(long now){ Imgproc.rectangle(capImg,new Point(),new Point(),new Scalar(0,0,255,2)); CascadeClassifier objDetector = new CascadeClassifier("haarcascade_frontalface_default.xml"); if(objDetector.empty()) throw new RuntimeException("no xml file"); capture.read(capImg); capImg = dObj(objDetector,capImg); Image img = mat2Image(capImg); gc.drawImage(img,0,0); } } public static Image mat2Image(Mat mat){ MatOfByte buffer = new MatOfByte(); Imgcodecs.imencode(".png",mat,buffer); return new Image(new ByteArrayInputStream(buffer.toArray())); } }

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

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

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

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

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

KSwordOfHaste

2017/12/28 10:08

コードを拝見する限り殆どの描画制御をOpenCVで行っているように見えます。タイトルをJavaFX->OpenCVに変えた方がよいかも知れませんね。JavaFXでやるならCanvas上の画像をキャプチャーして低水準の画像処理を自前で書くようなイメージを持ちます。OpenCVを使っているのにわざわざJavaFX側でそんな面倒なことをするとは思えないのですが?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問