将两个Mat图像合并为一个

我有个问题。 我有一个图像。 然后我必须将图像分成两个相等的部分。 我这样做(代码编译,一切都很好):

Mat image_temp1 = image(Rect(0, 0, image.cols, image.rows/2)).clone(); Mat image_temp2 = image(Rect(0, image.rows/2, image.cols, image.rows/2)).clone(); 

然后我必须独立地改变每个部分,最后合并为一个。 我不知道如何正确地做到这一点。 我应该如何将这两部分图像合并为一个图像?
示例: http : //i.stack.imgur.com/CLDK7.jpg

有几种方法可以做到这一点,但我找到的最好的方法是使用cv::hconcat(mat1, mat2, dst)进行水平合并,或使用cv::vconcat(mat1, mat2, dst)进行垂直。

别忘了照顾空矩阵合并案例!

似乎cv :: Mat :: push_back正是你想要的:

C ++:void Mat :: push_back(const Mat&m):将元素添加到矩阵的底部。

 Parameters: m – Added line(s). 

该方法将一个或多个元素添加到矩阵的底部。 当elem为Mat时,其类型和列数必须与容器矩阵中的相同

或者,您可以创建适当大小的新cv::Mat并将图像部分直接放入其中:

 Mat image_temp1 = image(Rect(0, 0, image.cols, image.rows/2)).clone(); Mat image_temp2 = image(Rect(0, image.rows/2, image.cols, image.rows/2)).clone(); ... cv::Mat result(image.rows, image.cols); image_temp1.copyTo(result(Rect(0, 0, image.cols, image.rows/2))); image_temp2.copyTo(result(Rect(0, image.rows/2, image.cols, image.rows/2)); 

这个怎么样:

 Mat newImage = image.clone(); Mat image_temp1 = newImage(Rect(0, 0, image.cols, image.rows/2)); Mat image_temp2 = newImage(Rect(0, image.rows/2, image.cols, image.rows/2)); 

通过不使用clone()来创建临时图像,在修改临时图像时隐式修改newImage ,而无需再次合并它们。 更改image_temp1image_temp2newImage将与您拆分,修改然后合并子图像完全相同。