(EMGU)如何拆分和合并图像?

时间:2017-08-17 19:03:48

标签: c# image-processing merge split emgucv

我正在使用Emgu在Visual Studio上使用C#。

我正在对大图像进行多次图像处理。我有想法将图像分成两半,并行操作,它们合并图像。

为了实现这一目标,我发现了许多关于采集矩形图像以进行处理以及将图像分割成通道(RGB,HSV等)的问题。我没有找到一个问题来解决拍摄图像的任务,并将其分成两个图像。我还没有找到一个问题来解决两个图像并将它们组合起来。

以下代码是我想要做的,其中split和merge是想象的方法来实现它。

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 个答案:

答案 0 :(得分: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

Lena Original

Lena上半场

Lena Top Half

Lena Bottom Half

Lena Bottom Half

新Lena重新排列

New Lena