我正在使用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);
这是我讨厌的问题类型,因为它很简单,您会认为它有一个简单易用的解决方案,但我没有找到它,或者我找到它并且不理解它。
答案 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上半场
Lena Bottom Half
新Lena重新排列