在OpenCV中,如何使两个Mat类图像对应点的像素值交换?两个图像均为8UC1
4条回答 默认 最新
- Kwan的解忧杂货铺 2024-02-29 15:47关注
こばや小林 下午好🌅🌅🌅
本答案参考通义千问在OpenCV中,如果你有两个
Mat
对象(cv::Mat
),并且你想交换它们对应点的像素值,你可以使用copyTo()
函数来实现这一点。这个函数允许你将一个Mat
的像素值复制到另一个Mat
上,同时可以指定一个偏移量来选择要复制的区域。以下是一个简单的步骤来交换两个
Mat
对象对应点的像素值:- 创建一个临时的
Mat
对象:这将用于存储其中一个Mat
的副本,以便我们可以安全地操作原始图像。 - 确定要交换的区域:假设我们有一个点集合(例如,两个点的坐标)
points
,你可以使用Rect
或(x, y, width, height)
来定义交换的区域。 - 复制像素值:使用
copyTo()
函数,指定目标和源Mat
,以及要复制的区域。
#include <opencv2/opencv.hpp> // 假设你已经有了两个Mat对象,如 img1 和 img2 cv::Mat temp; // 创建一个临时的Mat对象 // 确定要交换的区域,这里以一个点为例,(x1, y1)是第一个点,(x2, y2)是第二个点 cv::Point p1(x1, y1), p2(x2, y2); cv::Rect roi(p1, cv::Size(1, 1)); // 交换一个像素 // 复制img1到temp,交换区域 img1.copyTo(temp, roi); // 然后将temp中的值复制回img2,同样使用roi作为目标区域 temp.copyTo(img2, roi);
请注意,这个例子只交换了两个像素,如果你需要交换的是多个点或者更大的区域,你需要遍历这些点,并为每个点创建一个新的
Rect
。如果points
是一个二维数组,你可以这样做:for (const auto &point : points) { cv::Rect roi(point, cv::Size(1, 1)); // 交换一个像素 img1.copyTo(temp, roi); temp.copyTo(img2, roi); }
这段代码会遍历
points
中的每个点,每次迭代都会交换两个图像中对应点的像素值。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 - 创建一个临时的
悬赏问题
- ¥15 服务器清除BIOS之后引导不了
- ¥15 CPLEX用OPL编写的混合整数线性优化问题。
- ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
- ¥15 前端预览docx文件,文件从后端传送过来。
- ¥15 层次聚类和蛋白质相似度
- ¥25 主成分分析中的第一第二主成分分别代表哪些参数
- ¥15 oracle数据库查询语句问题
- ¥15 有没有c++绘制算法的佬们吗救孩一下
- ¥15 android 蓝牙闪退
- ¥15 绝缘子污秽comsol仿真参数