2017-08-17 419 views
1

我正在使用Emgu的Visual Studio C#工作。(EMGU)如何拆分和合並圖像?

我正在做一個大圖像上的幾個圖像操作。我有這樣的想法:將圖像分成兩部分,並行操作,合併圖像。爲了追求這個目標,我發現了一些關於獲取圖像的矩形部分進行處理以及將圖像分割成通道(RGB,HSV等)的問題。我還沒有找到一個問題來解決拍攝圖像的任務,並將其製作成兩幅圖像。我還沒有找到解決拍攝兩張照片並將它們拼湊在一起的問題。

下面的代碼是我想要做的,其中拆分和合並是虛構的方法來完成它。

Image<Bgr,Byte> ogImage = new Image<Bgr, byte>(request.image); 
Image<Bgr,Byte> topHalf = new Image<Bgr, byte>(); 
Image<Bgr,Byte> bottomHalf = new Image<Bgr, byte>(); 

ogImage.splitHorizonally(topHalf,bottomHalf); 

//operations 

ogImage = topHalf.merge(bottomHalf); 

這是問題,我討厭問的類型,因爲它很簡單,你會覺得它有一個簡單的,容易獲得的解決方案,但我還沒有找到它,或者我發現它並沒有理解。

+1

要劈成兩半的形象,創造了原來的每一半大小兩種新的圖像,然後繪製的各佔一半原始到每個新的圖像。要合併,請在原始圖像上的正確位置繪製2個較小的圖像。 – 0liveradam8

+0

@ 0liveradam8你介意我問你畫的是什麼意思嗎?這是命令嗎?或者你的意思是做一個像素到像素繪製 – Dent7777

+1

我不熟悉emgu,所以我不知道你有什麼命令可用;我已經使用了System.Drawing.Graphics,你可以像我已經描述的那樣使用這些命令。我只是試圖描述一些可以採取的邏輯步驟來嘗試實現。 – 0liveradam8

回答

1

有很多方法可以解決這個問題,但這是我所做的。我拿出;-)

Mat lena = new Mat(@"D:\OpenCV\opencv-3.2.0\samples\data\Lena.jpg", 
         ImreadModes.Unchanged); 

    CvInvoke.Imshow("Lena", lena); 

    System.Drawing.Rectangle topRect = new Rectangle(0, 
                0, 
                lena.Width, 
                (lena.Height/2)); 

    System.Drawing.Rectangle bottomRect = new Rectangle(0, 
                 (lena.Width/2), 
                 lena.Width, 
                 (lena.Height/2)); 

    Mat lenaTop = new Mat(lena, topRect); 

    CvInvoke.Imshow("Lena Top", lenaTop); 

    Mat lenaBottom = new Mat(lena, bottomRect); 

    CvInvoke.Imshow("Lena Bottom", lenaBottom); 

    Mat newLena = new Mat(); 

    CvInvoke.VConcat(lenaBottom, lenaTop, newLena); 

    CvInvoke.Imshow("New Lena", newLena); 

    CvInvoke.WaitKey(0); 

原始最簡單的方法莉娜

Lena Original

莉娜上半部分

Lena Top Half

莉娜下半部

Lena Bottom Half

新莉娜重排

New Lena