<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)

    隨筆檔案

    文章檔案

    相冊(cè)

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    現(xiàn)在的畢業(yè)設(shè)計(jì)越做越出花來了  用java進(jìn)行視頻捕捉這樣的需求也會(huì)出現(xiàn) 其實(shí)也不是不可以 只是這樣做有意思嗎

    簡(jiǎn)單上網(wǎng)查了下 用java捕捉不外乎用采集卡原生的api做個(gè)jni的wrapper和用directshow或vfw等windows通用的api做jni兩種做法 當(dāng)然有同學(xué)硬要做video4linux的api我也不會(huì)反對(duì)的

    因?yàn)槲覜]有那位同學(xué)的采集卡 所以用廠商的sdk的方案短期內(nèi)不現(xiàn)實(shí)  所以我用了sun的jmf庫來采集

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

    =============================================================================================================================
    下面是代碼片斷和簡(jiǎn)單說明
    PlayerFrame是一個(gè)視頻播放控制類 我們就創(chuàng)建一個(gè)繼承自他的新類Demo
    public class Demo extends PlayerFrame {

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

    設(shè)備的選擇連接和打開
    CaptureDialog是一個(gè)捕捉設(shè)備選擇對(duì)話框
    JMFUtils.createCaptureDataSource函數(shù)根據(jù)設(shè)備創(chuàng)建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("視頻信號(hào)");
            //        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) 評(píng)論(6)  編輯  收藏

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

    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();

    }
    }  回復(fù)  更多評(píng)論
      
    # re: java的視頻捕捉 [未登錄] 2008-05-28 09:14 zarra
    @zz
    方便的話給各聯(lián)系方式

    保存圖片的方法 看看 這個(gè)能不能給你點(diǎn)幫助

    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");

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

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲AV永久无码精品一区二区国产 | 亚洲日韩在线观看免费视频| 亚洲中文字幕视频国产| 日韩免费视频一区二区| 亚洲成人网在线观看| 免费看国产曰批40分钟| 九九精品成人免费国产片| 亚洲日本va在线观看| 亚洲色婷婷综合开心网| 91精品免费国产高清在线| 阿v免费在线观看| 亚洲综合色丁香麻豆| 国产国产人免费视频成69大陆 | 色妞www精品视频免费看| 国产亚洲AV无码AV男人的天堂| 91大神免费观看| 免费人成大片在线观看播放电影| 亚洲AV区无码字幕中文色| 成人a免费α片在线视频网站| 97国免费在线视频| 亚洲精品午夜国产va久久| 亚洲成AV人片在线播放无码| 嫩草影院免费观看| 99热这里只有精品6免费| 免费无码午夜福利片| 国产精品亚洲四区在线观看| 亚洲人成网77777色在线播放| 成人免费视频一区二区三区| 99视频在线精品免费| 一区视频免费观看| 男女午夜24式免费视频| 亚洲乱妇熟女爽到高潮的片| 亚洲精品视频在线| 亚洲一级特黄大片无码毛片| 最近最好的中文字幕2019免费| 少妇无码一区二区三区免费| 一级美国片免费看| 亚洲av无码专区青青草原| 亚洲一级毛片视频| 亚洲视频在线免费看| 久久久久久久综合日本亚洲|