<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 67  文章 - 79  trackbacks - 0
    <2008年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(1)

    隨筆檔案

    文章檔案

    相冊

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    現在的畢業設計越做越出花來了  用java進行視頻捕捉這樣的需求也會出現 其實也不是不可以 只是這樣做有意思嗎

    簡單上網查了下 用java捕捉不外乎用采集卡原生的api做個jni的wrapper和用directshow或vfw等windows通用的api做jni兩種做法 當然有同學硬要做video4linux的api我也不會反對的

    因為我沒有那位同學的采集卡 所以用廠商的sdk的方案短期內不現實  所以我用了sun的jmf庫來采集

    jmf在windows平臺下用的是vfw api 效率比較低 另外有一個商業的directshow的java wrapper名字叫dsj 這個性能基本和c++打平了 不過這個需要授權費 所以算了吧
    jmf的安裝很簡單 去 http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/download.html 下載下來 安裝好以后在桌面會看到一個JMStudio圖標 運行JMStudio如果視頻采集正常的話 說明jmf能識別采集卡(其實就是采集卡提供了vfw接口)至此視頻采集成功了大半 簡單吧

    =============================================================================================================================
    下面是代碼片斷和簡單說明
    PlayerFrame是一個視頻播放控制類 我們就創建一個繼承自他的新類Demo
    public class Demo extends PlayerFrame {

        public Demo() {
            super(null, "Capture");
        }
    ...

    設備的選擇連接和打開
    CaptureDialog是一個捕捉設備選擇對話框
    JMFUtils.createCaptureDataSource函數根據設備創建datasource
    private void init() throws NoPlayerException, IOException {
            // setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
            String nameCaptureDeviceAudio = null;
            String nameCaptureDeviceVideo = null;

            CaptureDialog dialogCapture = new CaptureDialog(this, null);
            dialogCapture.show();
            if (dialogCapture.getAction() == CaptureDialog.ACTION_CANCEL)
                return;

            CaptureDeviceInfo cdi = dialogCapture.getAudioDevice();
            if (cdi != null && dialogCapture.isAudioDeviceUsed())
                nameCaptureDeviceAudio = cdi.getName();
            cdi = dialogCapture.getVideoDevice();
            if (cdi != null && dialogCapture.isVideoDeviceUsed())
                nameCaptureDeviceVideo = cdi.getName();
            dataSource = JMFUtils.createCaptureDataSource(nameCaptureDeviceAudio,
                    dialogCapture.getAudioFormat(), nameCaptureDeviceVideo,
                    dialogCapture.getVideoFormat());
            DataSource cdswrapper = new CDSWrapper(
                    (PushBufferDataSource) dataSource);
            dataSource=cdswrapper;
            dataSource.connect();
            open(dataSource);
    ...

    preview畫面顯示控件的放置
        public void createComponent() throws NoPlayerException, IOException {
            setTitle("視頻信號");
            //        addWindowListener(new WinClose());

            panel = new JPanel();

            if ((com = mediaPlayerCurrent.getVisualComponent()) != null) {
                panel.add(com);
            }
            add(BorderLayout.CENTER, panel);

        }

    單幀捕捉
    JButton capture = new JButton("Capture Image");
            capture.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent arg0) {
                    mediaPlayerCurrent.stop();
                    Buffer bufferFrame;
                    BufferToImage bufferToImage;
                    Image image;
                    BufferedImage bi;
                    controlGrabber = (FrameGrabbingControl) mediaPlayerCurrent
                            .getControl("javax.media.control.FrameGrabbingControl");
                    bufferFrame = controlGrabber.grabFrame();
                    bufferToImage = new BufferToImage((VideoFormat) bufferFrame
                            .getFormat());

                    image = bufferToImage.createImage(bufferFrame);

                    File out = new File("capture" + (++captureCount) + ".png");
                    try {
                        bi = toBufferedImage(image);
                        ImageIO.write(bi, "png", out);
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }

                    mediaPlayerCurrent.start();

                }
            });

    寫好的文件在 http://www.tkk7.com/Files/zarra/Demo001.zip
    posted on 2008-05-10 12:33 zarra 閱讀(1472) 評論(6)  編輯  收藏

    FeedBack:
    # re: java的視頻捕捉 [未登錄] 2008-05-11 14:08 apple
    老師,您辛苦了!!真的不知道該怎么謝您了!!  回復  更多評論
      
    # re: java的視頻捕捉 [未登錄] 2008-05-19 16:51 zz
    老師您好,怎樣將一幅圖片的色彩值,即就是R、G、B值提取出來  回復  更多評論
      
    # re: java的視頻捕捉  2008-05-22 16:02 zarra
    @zz
    這個問題太大了 。。。
    你的是什么圖片 已編碼的圖像文件 raw像素值 從圖形設備上捕捉到的位圖?   回復  更多評論
      
    # re: java的視頻捕捉 [未登錄] 2008-05-26 21:38 zz
    我的畢業設計題目是:視頻摘要系統。本來是打算通過一副參照圖片,將其圖像信息提取,然后依據所提取數據,自動捕捉視頻中與其相似的圖片出來。以我現在的水平,時間刻不容緩,馬上答辯了,只能做到在視頻播放過程中,捕捉圖像(已經實現),然后將捕捉到的圖片存儲下來,并對其色彩值提取出來。現附上源碼,希望老師幫幫我,一是捕捉圖片后能存儲,二是提取所捕獲圖片信息。

    import java.awt.*;
    import java.awt.image.*;
    import javax.swing.*;
    import com.sun.image.codec.jpeg.*;

    class ImageCanvas extends Canvas{
    private Image image;
    private Dimension prefSize;

    public ImageCanvas(Image image){
    this.image = image;
    calculatePreferredSize();
    }

    public void setImage(Image image){
    this.image = image;
    calculatePreferredSize();
    repaint();
    }

    private void calculatePreferredSize(){
    prefSize = new Dimension(image.getWidth(this),image.getHeight(this));
    System.out.println(image.getWidth(this));
    setSize(prefSize);
    }

    public Dimension getPreferredSize() {
    return prefSize;
    }

    public Dimension getMinimumSize() {
    return prefSize;
    }

    public void update(Graphics g){
    paint(g);
    }
    public void paint(Graphics g){
    g.drawImage(image,0,0,null);
    }
    }

    class ImageUtils{
    public static Image getScreenImage(){
    Robot robot;
    try {
    robot = new Robot();
    }catch(Exception e) {
    throw new RuntimeException("unable to construct Robot");
    }
    Dimension screenDims =Toolkit.getDefaultToolkit().getScreenSize();
    Image screen =robot.createScreenCapture(new Rectangle (140,60,screenDims.width,screenDims.height)).getScaledInstance (400,300,Image.SCALE_SMOOTH);
    MediaTracker tracker =new MediaTracker(new Label());
    tracker.addImage(screen,1);
    try {
    tracker.waitForID(0);
    }catch(InterruptedException e) { /** ... */ }
    return screen;
    }
    }

    public class ScreenCapture extends JFrame{
    private ImageCanvas canvas =new ImageCanvas(ImageUtils.getScreenImage());
    public ScreenCapture(){
    add(canvas);
    setLocation(0,0);
    setSize(400,350);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Thread imageThread =new UpdateThread();
    imageThread.setDaemon(true);
    imageThread.start();
    }

    class UpdateThread extends Thread{
    public void run(){
    while(true){
    try {
    Thread.currentThread().sleep(1000);
    }
    catch (Exception ex) {

    }
    canvas.setImage(ImageUtils.getScreenImage());
    validate();
    }
    }
    }

    public static void main(String[] args){
    new ScreenCapture();

    }
    }  回復  更多評論
      
    # re: java的視頻捕捉 [未登錄] 2008-05-28 09:14 zarra
    @zz
    方便的話給各聯系方式

    保存圖片的方法 看看 這個能不能給你點幫助

    Buffer bufferFrame;
    BufferToImage bufferToImage;
    Image image;
    BufferedImage bi;
    controlGrabber = (FrameGrabbingControl) mediaPlayerCurrent
    .getControl("javax.media.control.FrameGrabbingControl");
    bufferFrame = controlGrabber.grabFrame();
    bufferToImage = new BufferToImage((VideoFormat) bufferFrame
    .getFormat());

    image = bufferToImage.createImage(bufferFrame);

    File out = new File("capture" + (++captureCount) + ".png");

    其實就是java的Buffer BufferToImage 和 BufferedImage 三個類  回復  更多評論
      
    # re: java的視頻捕捉 [未登錄] 2008-05-28 16:44 zz
    @zarra
    謝謝老師!
    QQ:171189195
    e-mail:lovelife619@163.com
    方便的話也留個您的聯系方式  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲成年人啊啊aa在线观看| 亚洲一级片免费看| 日韩在线视精品在亚洲| 亚洲理论电影在线观看| 91频在线观看免费大全| 人妻巨大乳hd免费看| 亚洲视频日韩视频| 伊在人亚洲香蕉精品区麻豆| 精品无码人妻一区二区免费蜜桃| 亚洲老熟女五十路老熟女bbw| 亚洲香蕉成人AV网站在线观看| 成年在线观看网站免费| aaa毛片免费观看| 亚洲欧美中文日韩视频| 亚洲av最新在线网址| 免费人成在线观看视频播放| 亚洲精品免费在线| 特色特黄a毛片高清免费观看| 亚洲国产美女精品久久久久| 中文字幕人成人乱码亚洲电影| 无码国产精品久久一区免费 | 成人免费ā片在线观看| 国产精品亚洲四区在线观看| 亚洲色精品88色婷婷七月丁香| 精品无码国产污污污免费| 99热这里只有精品6免费| 丁香六月婷婷精品免费观看| 亚洲熟女www一区二区三区| 亚洲精品国产精品乱码视色| 性做久久久久免费看| 最近高清中文字幕无吗免费看| 国产猛男猛女超爽免费视频| 免费大片av手机看片高清| 亚洲精品伦理熟女国产一区二区| 亚洲精品在线免费观看| 亚洲av永久无码精品漫画| 久久亚洲国产成人影院网站 | 亚洲mv国产精品mv日本mv| 亚洲一区二区在线视频| 亚洲一区无码中文字幕| 亚洲国产一成久久精品国产成人综合|