Java がリアルタイム カメラを取得して写真を撮影します (ソース コードが添付されています)

1. はじめに

1 はじめに

Javaは画像処理やカメラ操作など、さまざまなアプリケーションを開発できる汎用プログラミング言語です。

        Java でリアルタイム カメラで写真を撮影するには、通常、OpenCV (オープン ソース コンピューター ビジョン ライブラリ)Java Media Framework (JMF)などのサードパーティ ライブラリまたは APIを使用します。これらのライブラリと API は、カメラおよび画像処理機能へのアクセスを提供します。

これらのライブラリと API を使用すると、カメラを呼び出してリアルタイムでビデオ ストリームを取得する Java コード        を作成できます次に、ビデオ ストリームから画像をキャプチャし、画像ファイルとして保存することを選択できますこのようにして、Javaで写真を撮影するためのリアルタイムカメラを取得する機能を実現できます。

具体的な実装手順は使用するライブラリや API によって異なる場合がありますので、Java でこの関数を実装する方法については、以下のサンプル コードを参照してください。

2. 目的

        写真を撮るためにリアルタイム カメラを入手する目的は、特定のアプリケーション シナリオとニーズに応じて多様です。

        写真撮影用のリアルタイム カメラを取得する目的は、リアルタイム画像データを使用して、画像処理、遠隔通信、監視とセキュリティ、仮想拡張現実、日常撮影などのさまざまなアプリケーションのニーズを満たすことです。

  1. 画像処理とコンピュータ ビジョン: リアルタイムのカメラ撮影により、画像処理やコンピュータ ビジョンのタスクにとって非常に重要なリアルタイムの画像データが得られます。たとえば、カメラで撮影した画像は、顔認識、物体検出、ジェスチャ認識などのタスクに使用できます。
  2. ビデオ会議とリモートコミュニケーション: ライブ写真はビデオ会議とリモートコミュニケーションに使用でき、参加者がリアルタイムで対話し、お互いの画像を表示できるようになります。これは、リモートワークやリモートコラボレーションの環境では特に重要です。
  3. リアルタイム監視・セキュリティシステム:リアルタイム監視・セキュリティシステムは、リアルタイムカメラを取得して写真を撮影することで実現できます。これは、家庭、オフィス、公共の場所、およびリアルタイムの監視とセキュリティが必要なその他の場所に非常に役立ちます。
  4. 仮想現実と拡張現実: 仮想現実と拡張現実のアプリケーションでは、リアルタイムのカメラ撮影により、仮想世界と対話するための現実世界の画像が提供されます。たとえば、カメラを使用してユーザーの動きをキャプチャし、仮想環境にリアルタイムでレンダリングできます。
  5. ビデオ録画および写真撮影機能: もちろん、写真撮影用のリアルタイム カメラを入手する最も基本的な目的は、特定の瞬間の画像を記録してキャプチャすることです。これは、個人の写真撮影、オンライン教育、電子商取引など、さまざまなアプリケーション シナリオに適用できます。

2. プロセス

実際、理論の話になると少し混乱することがあります。そのため、私たちはその部分をスキップしてコードに直接進みます。簡単な手順を 2 つの手順に分けてまとめました。

  1. 輸入
  2. 関数の書き込み

[注意]その前にMavenの基礎が必要ですがパッケージのインポートがない場合は少し面倒なので、自分でパッケージのアドレスを調べてローカルにダウンロードしてパッケージをインポートする必要があります。

1. ガイドパッケージ

呼び出し可能パッケージの導入、これは重要な部分です。サードパーティのライブラリを使用してビデオ ストリームを取得します。

<!--    github调用摄像头-->
<!-- https://mvnrepository.com/artifact/com.github.sarxos/webcam-capture -->
<dependency>
    <groupId>com.github.sarxos</groupId>
    <artifactId>webcam-capture</artifactId>
    <version>0.3.12</version>
</dependency>

2. 関数の書き方

ウィンドウを使用して機能の実装をより直感的に表示したり、コアコードを説明したりするものもあり、必要に応じてコードを更新できます。

2.1、利用swing

スイング ウィンドウを使用して取得したビデオ ストリーム画面を表示し、スイング ボタンのクリック イベントを使用して画面をキャプチャし、ローカル パスに保存します。

package com;

import com.github.sarxos.webcam.Webcam;
import com.github.sarxos.webcam.WebcamPanel;
import com.github.sarxos.webcam.WebcamResolution;
import com.github.sarxos.webcam.WebcamUtils;
import com.github.sarxos.webcam.util.ImageUtils;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * 相机
 */
public class SwingWebCam {

    private static JFrame window;

    public static void main(String[] args) throws Exception {
        // 获取默认的摄像头实例
        final Webcam webcam = Webcam.getDefault();
        // 设置摄像头捕获的图像尺寸为VGA
        webcam.setViewSize(WebcamResolution.VGA.getSize());
        // 创建一个WebcamPanel对象,并将摄像头实例传递给它
        WebcamPanel panel = new WebcamPanel(webcam);
        // 设置在图像面板上显示FPS、调试信息和图像尺寸,并进行镜像显示
        panel.setFPSDisplayed(true);
        panel.setDisplayDebugInfo(true);
        panel.setImageSizeDisplayed(true);
        panel.setMirrored(true);
        // 创建一个JFrame窗口对象,并将摄像头面板添加到窗口中
        window = new JFrame("摄像头");
        window.add(panel);
        // 设置窗口的一些属性和可见性
        window.setResizable(true);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.pack();
        window.setVisible(true);

        // 创建一个拍照按钮,并将其添加到窗口底部
        final JButton button = new JButton("拍照");
        window.add(panel, BorderLayout.CENTER);
        window.add(button, BorderLayout.SOUTH);

        window.setResizable(true);
        window.pack();
        window.setVisible(true);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // 为按钮添加点击事件监听器,实现拍照功能
                button.setEnabled(false);  // 设置按钮不可点击

                // 实现拍照保存-------start
                String fileName = "D://" + System.currentTimeMillis();       // 保存路径即图片名称(不用加后缀)

                // 使用WebcamUtils.capture()方法拍照并保存
                WebcamUtils.capture(webcam, fileName, ImageUtils.FORMAT_PNG);

                // 通过SwingUtilities.invokeLater()方法,在拍照完成后弹出对话框显示拍照成功,并重新启用按钮的点击功能。
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        JOptionPane.showMessageDialog(null, "拍照成功");
                        button.setEnabled(true);    // 设置按钮可点击
                        return;
                    }
                });
                // 实现拍照保存-------end
            }
        });
    }
}

2.2. コアコード

コア コードで必要なのは、カメラを直接呼び出してビデオ ストリームを取得し、キャプチャしてローカル パスに保存することだけです。

//        获取默认的摄像头实例
        final Webcam webcam = Webcam.getDefault();
//        设置摄像头捕获的图像尺寸为VGA
        webcam.setViewSize(WebcamResolution.VGA.getSize());
//        创建一个WebcamPanel对象,并将摄像头实例传递给它
        WebcamPanel panel = new WebcamPanel(webcam);
//        设置在图像面板上显示FPS、调试信息和图像尺寸,并进行镜像显示
        panel.setFPSDisplayed(true);
        panel.setDisplayDebugInfo(true);
        panel.setImageSizeDisplayed(true);
        panel.setMirrored(true);
        //实现拍照保存-------start
        String fileName = "D://" + System.currentTimeMillis();       //保存路径即图片名称(不用加后缀)
        System.out.println(fileName);
//                webcam实例名;fileName:地址;
        WebcamUtils.capture(webcam, fileName, ImageUtils.FORMAT_PNG);
//关闭摄像头
        webcam.close();

3. まとめ

これが私のコアコードの概要です

このコア コードは、Java を使用してリアルタイム カメラを取得し、写真を撮影し、指定されたパスに画像を保存する方法を示しています。

  1. デフォルトのカメラ インスタンスを取得する:
            Webcam クラスの getDefault() メソッドを使用して、デフォルトのカメラ インスタンスを取得します。
  2. カメラでキャプチャした画像サイズを設定する:
            webcam.setViewSize() メソッドを使用して、カメラでキャプチャした画像サイズを VGA (640x480) に設定します。
  3. WebcamPanel オブジェクトを作成する:
           WebcamPanel オブジェクトを作成し、それにカメラ インスタンスを渡して、リアルタイム画像の表示を実現します。
  4. 画像パネルに関連情報を表示するように設定する:
            WebcamPanel の一連のメソッドを使用して、画像パネル上の FPS、デバッグ情報、画像サイズの表示を設定し、ミラー表示を行います。
  5. 写真の撮影と保存を実現する:
           WebcamUtils の Capture() メソッドを呼び出し、カメラ インスタンスを渡し、パスと画像形式をパラメータとして保存することで、写真を撮影して画像を保存できます。
  6. カメラを閉じる:
            webcam.close() メソッドを使用してカメラを閉じます。

[注意] Webcam、WebcamPanel、WebcamResolution、WebcamUtils、ImageUtils などの追加の関連ライブラリとツール クラスをインポートする必要があります。このコードを通じて、リアルタイム カメラを取得して写真を撮影し、画像を保存する機能を実現できます。

私の共有はここで終わります。質問がある場合は、コメント エリアで議論したりコミュニケーションしたりできます。

おすすめ

転載: blog.csdn.net/weixin_74383330/article/details/133297169