(EMGU) 如何拆分和合并图像?
(EMGU) How do I split and merge an Image?
我正在使用 C# 与 Emgu Visual Studio 合作。
我正在对一张大图像进行一些图像处理。我想到了将图像分成两半,并行进行操作,然后合并图像。
为了实现这个目标,我发现了一些关于获取图像的矩形部分进行处理以及将图像分割成通道(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);
这是我讨厌问的问题类型,因为它很简单,你会认为它有一个简单、容易获得的解决方案,但我没有找到它,或者我找到了但不理解它。
有很多方法可以解决这个问题,但我就是这样做的。我选择了最简单的方法 ;-)
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);
原版莉娜
莉娜上半场
莉娜下半场
重新排列的新莉娜
我正在使用 C# 与 Emgu Visual Studio 合作。
我正在对一张大图像进行一些图像处理。我想到了将图像分成两半,并行进行操作,然后合并图像。
为了实现这个目标,我发现了一些关于获取图像的矩形部分进行处理以及将图像分割成通道(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);
这是我讨厌问的问题类型,因为它很简单,你会认为它有一个简单、容易获得的解决方案,但我没有找到它,或者我找到了但不理解它。
有很多方法可以解决这个问题,但我就是这样做的。我选择了最简单的方法 ;-)
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);
原版莉娜
莉娜上半场
莉娜下半场
重新排列的新莉娜