こばや小林 2024-02-29 15:46 采纳率: 85.2%
浏览 2
已结题

对opencvmat图像处理

在OpenCV中,如何使两个Mat类图像对应点的像素值交换?两个图像均为8UC1

  • 写回答

4条回答 默认 最新

  • Kwan的解忧杂货铺 2024-02-29 15:47
    关注

    こばや小林 下午好🌅🌅🌅
    本答案参考通义千问

    在OpenCV中,如果你有两个Mat对象(cv::Mat),并且你想交换它们对应点的像素值,你可以使用copyTo()函数来实现这一点。这个函数允许你将一个Mat的像素值复制到另一个Mat上,同时可以指定一个偏移量来选择要复制的区域。

    以下是一个简单的步骤来交换两个Mat对象对应点的像素值:

    1. 创建一个临时的Mat对象:这将用于存储其中一个Mat的副本,以便我们可以安全地操作原始图像。
    2. 确定要交换的区域:假设我们有一个点集合(例如,两个点的坐标)points,你可以使用Rect(x, y, width, height)来定义交换的区域。
    3. 复制像素值:使用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中的每个点,每次迭代都会交换两个图像中对应点的像素值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月9日
  • 已采纳回答 3月1日
  • 创建了问题 2月29日

悬赏问题

  • ¥15 服务器清除BIOS之后引导不了
  • ¥15 CPLEX用OPL编写的混合整数线性优化问题。
  • ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
  • ¥15 前端预览docx文件,文件从后端传送过来。
  • ¥15 层次聚类和蛋白质相似度
  • ¥25 主成分分析中的第一第二主成分分别代表哪些参数
  • ¥15 oracle数据库查询语句问题
  • ¥15 有没有c++绘制算法的佬们吗救孩一下
  • ¥15 android 蓝牙闪退
  • ¥15 绝缘子污秽comsol仿真参数