2017-08-17 96 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