こばや小林 2024-02-15 23:19 采纳率: 85.2%
浏览 6

关于OpenCV修改像素点像素值

OpenCV中
定义了Mat B=Mat::zeros(rows,cols,CV_8UC1)
想要对
图像B的各个像素点进行储值处理,应该如何书写?
此时应该如何选择img.at<>内的数据类型?

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-15 23:20
    关注

    引自免费微信小程序:皆我百晓生

    在OpenCV中,如果你定义了一个单通道8位灰度图像Mat对象B:

    cv::Mat B = cv::Mat::zeros(rows, cols, CV_8UC1);
    

    要对图像B的各个像素点进行赋值处理,你可以使用.at<>方法来直接访问和修改某个像素点的值。这里的数据类型取决于你创建矩阵时指定的类型,对于CV_8UC1表示的是无符号8位整型(uchar),所以你需要这样操作:

    // 假设你想将所有像素点都设置为特定灰度值,比如127
    for (int i = 0; i < B.rows; ++i) {
        for (int j = 0; j < B.cols; ++j) {
            uchar value = 127; // 要赋给像素的灰度值
            B.at<uchar>(i, j) = value;
        }
    }
    

    如果你想按照某种规律或依据特定函数来改变每个像素点的值,上述循环内的代码可以相应地修改。

    注意:直接遍历并修改像素可能不是最高效的实现方式,特别是当需要进行复杂的图像处理时。OpenCV提供了一些优化过的函数,例如forEach()copyTo()等,根据实际情况可以考虑使用它们。但针对本例中的简单赋值需求,以上代码已经足够清晰和直观了。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月15日

悬赏问题

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