none
影片處理(使用AForge filter) RRS feed

  • 問題

  • 請問一下大大喔!!

    我程式寫這樣 可以順利播放影片檔

            private void playVideoToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form1.CheckForIllegalCrossThreadCalls = false; //視窗移動才不會當掉
                trd = new Thread(new ThreadStart(this.videothreadwork));
                trd.IsBackground = true;
                trd.Start();
            }

            private void videothreadwork()
            {
                if (videoStream != null)
                {
                    for (int i = 1; i < videoStream.CountFrames - 1; i++)
                    {
                        Bitmap InputImg = videoStream.GetBitmap(i);
                        pictureBox1.Image = InputImg;
                        Refresh();
                    }
                    videoStream.Close();
                }
                else
                {
                    MessageBox.Show("Video not open !!" , "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

     

    而這樣套用AForge執行也沒問題

            private void videothreadwork()
            {
                if (videoStream != null)
                {
                    Grayscale filter = new Grayscale(0.299, 0.587, 0.114);
                    for (int i = 1; i < videoStream.CountFrames - 1; i++)
                    {
                        Bitmap InputImg = videoStream.GetBitmap(i);
                        Bitmap InputImg1 = filter.Apply(InputImg);
                        pictureBox1.Image = InputImg1;
                        Refresh();
                    }
                    videoStream.Close();
                }
                else
                {
                    MessageBox.Show("Video not open !!" , "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

     

    但是我應用2個,執行時則會失敗!! 出現 "點陣圖區域已經鎖定。"

            private void videothreadwork()
            {
                if (videoStream != null)
                {
                    Grayscale filter = new Grayscale(0.299, 0.587, 0.114);
                    HistogramEqualization filter1 = new HistogramEqualization();
                    for (int i = 1; i < videoStream.CountFrames - 1; i++)
                    {
                        Bitmap InputImg = videoStream.GetBitmap(i);
                        Bitmap InputImg1 = filter.Apply(InputImg);
                        pictureBox1.Image = InputImg1;

                        Bitmap InputImg2 = filter1.Apply(InputImg1);
                        pictureBox2.Image = InputImg2;
                        Refresh();
                    }
                    videoStream.Close();
                }
                else
                {
                    MessageBox.Show("Video not open !!" , "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

    請問一下,該如何改才能應用2個以上呢??

    2010年7月14日 下午 05:51

解答

  • HI,

     

    您可以參考用同一個filter去處理, ex:

    // create filters sequence AForge.Imaging.Filters.FiltersSequence
    
    filter = new AForge.Imaging.Filters.FiltersSequence( );
    // add filters to the sequence
    
    filter.Add( new AForge.Imaging.Filters.Sepia( ) );
    filter.Add( new AForge.Imaging.Filters.RotateBilinear( 45) );
    filter.Add( new AForge.Imaging.Filters.ResizeBilinear( 320, 240 ) );
    filter.Add( new AForge.Imaging.Filters.Pixellate( 8 ) );
    filter.Add( new AForge.Imaging.Filters.Jitter( 2 ) );
    filter.Add( new AForge.Imaging.Filters.Blur( ) );
    // apply the sequence to an image
    
    System.Drawing.Bitmap newImage = filter.Apply( image );

     

     

    ref: http://www.codeproject.com/KB/GDI-plus/Image_Processing_Lab.aspx


    Tech.Days Taiwan 2010 即將於 9/28-9/30 隆重展開!我們很榮幸向您推薦此微軟年度重量級的技術盛會

    • 已標示為解答 小海339 2010年7月27日 上午 06:25
    2010年7月23日 上午 03:24

所有回覆

  • Hi,

     

    如果要用同一個圖檔, 應該是要改成這樣:

      private void videothreadwork()
            {
                if (videoStream != null)
                {
                    Grayscale filter = new Grayscale(0.299, 0.587, 0.114);
                    HistogramEqualization filter1 = new HistogramEqualization();
                    for (int i = 1; i < videoStream.CountFrames - 1; i++)
                    {
                        Bitmap InputImg = videoStream.GetBitmap(i);
                        Bitmap InputImg1 = filter.Apply(InputImg);
                        pictureBox1.Image = InputImg1;

                        Bitmap InputImg2 = filter1.Apply(InputImg );
                        pictureBox2.Image = InputImg2;
                        Refresh();
                    }
                    videoStream.Close();
                }
                else
                {
                    MessageBox.Show("Video not open !!" , "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }


    微軟技術支援中心 CSS - http://www.dotblogs.com.tw/lolota
    • 已標示為解答 Lolota Lee 2010年7月22日 上午 01:57
    • 已取消標示為解答 Lolota Lee 2010年7月23日 上午 03:01
    2010年7月22日 上午 01:57
  • 不好意思!! 我並沒有要用同一個圖檔

    是要用做出來的那張灰階圖在下去做HE

    所以因該是放InputImg1沒錯吧...

     

    ps. 我不記得我有選出 "解答"  是論壇會自選嗎?? 新手不太懂 一一""

    2010年7月22日 上午 04:38
  • 該篇回答下方有標記解答者的註記。

    就在你的不好意思上面。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年7月22日 下午 02:23
  • HI,

     

    您可以參考用同一個filter去處理, ex:

    // create filters sequence AForge.Imaging.Filters.FiltersSequence
    
    filter = new AForge.Imaging.Filters.FiltersSequence( );
    // add filters to the sequence
    
    filter.Add( new AForge.Imaging.Filters.Sepia( ) );
    filter.Add( new AForge.Imaging.Filters.RotateBilinear( 45) );
    filter.Add( new AForge.Imaging.Filters.ResizeBilinear( 320, 240 ) );
    filter.Add( new AForge.Imaging.Filters.Pixellate( 8 ) );
    filter.Add( new AForge.Imaging.Filters.Jitter( 2 ) );
    filter.Add( new AForge.Imaging.Filters.Blur( ) );
    // apply the sequence to an image
    
    System.Drawing.Bitmap newImage = filter.Apply( image );

     

     

    ref: http://www.codeproject.com/KB/GDI-plus/Image_Processing_Lab.aspx


    Tech.Days Taiwan 2010 即將於 9/28-9/30 隆重展開!我們很榮幸向您推薦此微軟年度重量級的技術盛會

    • 已標示為解答 小海339 2010年7月27日 上午 06:25
    2010年7月23日 上午 03:24
  • 感謝大大,細心回答!! 我在想看看~~

    2010年7月27日 上午 06:24