<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ì)越做越出花來(lái)了  用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)槲覜](méi)有那位同學(xué)的采集卡 所以用廠(chǎng)商的sdk的方案短期內(nèi)不現(xiàn)實(shí)  所以我用了sun的jmf庫(kù)來(lái)采集

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

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

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

    設(shè)備的選擇連接和打開(kāi)
    CaptureDialog是一個(gè)捕捉設(shè)備選擇對(duì)話(huà)框
    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畫(huà)面顯示控件的放置
        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();

                }
            });

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

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

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费看大黄高清网站视频在线| 亚洲另类少妇17p| 在线观看亚洲专区| 亚洲人成在线播放网站| 免费精品国产自产拍在线观看图片| 亚洲成av人片在www鸭子| 国产亚洲欧洲精品| 成人毛片18岁女人毛片免费看| 一级毛片视频免费观看| 亚洲成人动漫在线观看| 亚洲国产专区一区| 国产日本一线在线观看免费| xxxxx做受大片视频免费| 67194在线午夜亚洲| 国产亚洲精品国产| 国产一卡二卡≡卡四卡免费乱码 | 99在线在线视频免费视频观看| 亚洲一区二区三区亚瑟| 国产偷国产偷亚洲清高动态图 | 久久久久亚洲av无码专区| 四虎永久精品免费观看| 巨波霸乳在线永久免费视频 | 2019中文字幕在线电影免费| 一级成人a做片免费| 亚洲一区二区三区高清不卡| 亚洲AV永久纯肉无码精品动漫| 国产美女a做受大片免费| 91免费国产自产地址入| 免费无码H肉动漫在线观看麻豆| 亚洲精华国产精华精华液网站| 亚洲精品线在线观看| 中文字幕中韩乱码亚洲大片| 在线观看免费宅男视频| 国产成人免费高清激情明星| 99视频在线免费观看| rh男男车车的车车免费网站| 亚洲av午夜电影在线观看 | 久久综合亚洲色hezyo| 亚洲男人的天堂久久精品 | a毛看片免费观看视频| 伊人久久国产免费观看视频|