将两个垫子图像合并为一个
Merge two Mat images into one
>我有一个问题。我有一个图像。然后我必须将图像分成两个相等的部分。我这样做了(代码已编译,一切都很好):
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();
然后我必须独立更改每个部分,最后合并为一个。我不知道如何正确做到这一点。我应该如何将图像的这两个部分合并为一个图像?
示例:https://i.stack.imgur.com/CLDK7.jpg
有
几种方法可以做到这一点,但我发现最好的方法是使用 cv::hconcat(mat1, mat2, dst)
进行水平合并或cv::vconcat(mat1, mat2, dst)
用于垂直合并。
不要忘记照顾空矩阵合并案例!
似乎 cv::Mat::p ush_back 正是您要找的:
C++:void Mat::p ush_back(const Mat& m):将元素添加到矩阵底部。
Parameters: m – Added line(s).
这些方法将一个或多个元素添加到矩阵的底部。当 elem 是 垫子,其类型和列数必须与 容器矩阵。
或者,您可以创建适当大小的新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
将与您拆分,修改然后合并子图像完全相同。
相关文章:
- 如何将一个数组值合并为一个整数c++
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 将两个 cpp 文件合并为一个 cpp 文件
- 将所有 *.txt 文件合并到一个文本文件中,其名称由用户使用 C++ 提供
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 将两个列表合并为一个蛇形列表
- 使用迭代器进行合并排序中的一个缓冲区
- 如何通过通用引用或std::forward将这三个c++模板函数合并为一个
- C将链接库合并为一个库
- 是否可以将前向声明和常规声明合并到一个文件中,然后像分开一样使用它?
- 我正在编写一个拆分为 3 的合并排序,我不知道为什么它不起作用
- 两个 cin / cout 语句合并为一个
- 我想将四个字节合并为一个数字以进行串行传输
- 将两个 1D 直方图合并为一个
- 如何合并两个双重链接列表(访问下一个链接)
- 将 3 个列表合并到一个大列表中
- C++全局常量数组:是否保证合并(优化)到一个副本中
- 如何合并一个pImpl接口,同时也允许WndProc与之交互
- 合并一个类的两个数组