将两个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_temp1
和image_temp2
, newImage
将与您拆分,修改然后合并子图像完全相同。