【c++|opencv】一、基础操作---3.访问图像元素

every blog every motto: You can do more than you think.
https://blog.csdn.net/weixin_39190382?type=blog

0. 前言

访问图像元素

1. 访问图像像素

1.1 访问某像素

//灰度图像:
image.at<uchar>(j, i) //j为行数,i为列数
//BGR彩色图像
image.at<Vec3b>(j, i)[0] //B分量
image.at<Vec3b>(j, i)[1] //G分量
image.at<Vec3b>(j, i)[2] //R分量

1.2 遍历像素

以添加噪声为例

1.2.1 准备

创建添加噪声函数

Salt.h

#pragma once
#include <iostream>
#include <opencv2/opencv.hpp>
#include <random>using namespace cv;
using namespace std;void Salt(Mat img,int n); // n加入噪声点数

Salt.cpp

#include "Salt.h"void Salt(Mat img,int n){// 随机数生成器default_random_engine generater;uniform_int_distribution<int> randRow(0,img.rows-1);uniform_int_distribution<int> randCol(0,img.cols-1);int i,j;for (int k=0;k<n;k++){i=randRow(generater);j=randCol(generater);if (img.channels() == 1){img.at<uchar>(i,j) = 255;}else if (img.channels() == 3){img.at<Vec3b>(i,j)[0] = 255;img.at<Vec3b>(i,j)[1] = 255;img.at<Vec3b>(i,j)[2] = 255;}}
}

1.2.2 添加噪声

#include "Salt.h"
#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main(){Mat img = imread("/home/v/home.png");if (img.empty()){cout<<"Could not open or find the image"<<endl;return -1;}imshow("Img",img);Salt(img,5000); // 加入噪声点imshow("Salt",img);waitKey(0);return 0;
}

在这里插入图片描述

1.3 指针遍历

1.3.1 以卷积运算为例

#include "Salt.h"
#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main(){Mat img = imread("/home/v/home.png");if (img.empty()){cout<<"Could not open or find the image"<<endl;return -1;}Mat out_img;out_img = Mat(img.size(),img.type()); // 定义输出图像大小out_img = img.clone(); // clone原图像像素值int rows = img.rows; // 原图行数int stepx = img.channels(); // 原图通道数int cols = (img.cols)*img.channels(); // 矩阵总列数for (int row=1;row<rows-1;row++){const uchar* previous = img.ptr<uchar>(row-1); // 原图上一行指针const uchar* current = img.ptr<uchar>(row); // 原图当前行指针const uchar* next = img.ptr<uchar>(row+1); // 原图下一行指针uchar* output = out_img.ptr<uchar>(row); // 输出图像当前指针for (int col=stepx;col<cols-stepx;col++){ // 对列进行遍历// saturate_cast<uchar>(a) 当a小于0,输出0,当a大于255输出255,0-255之间原样输出output[col] = saturate_cast<uchar>(5*current[col]-(previous[col]+current[col-stepx] + current[col+stepx] + next[col]));}}imshow("Img",img);imshow("Out",out_img);waitKey(0);return 0;
}

在这里插入图片描述

1.3.2 自带的卷积运算

#include "Salt.h"
#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main(){Mat img = imread("/home/v/home.png");if (img.empty()){cout<<"Could not open or find the image"<<endl;return -1;}Mat out_img;Mat kernel = (Mat_<char>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);filter2D(img,out_img,img.depth(),kernel); // 卷积imshow("Img",img);imshow("Out",out_img);waitKey(0);return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/156636.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高等数学啃书汇总重难点(十一)曲线积分与曲面积分

依旧是公式极其复杂恶心的一章&#xff0c;建议是&#xff1a;掌握两种线面积分的计算套路即可&#xff0c;和第8章一样属于同济版教材中最不重要的章节&#xff0c;不会对底层理解做过多考察~ 1.弧长曲线积分的几何意义 2.弧长曲线积分的定义和性质 3.弧长曲线积分的计算方式 …

项目知识点总结-住房图片信息添加-Excel导出

&#xff08;1&#xff09;住房信息添加 Controller&#xff1a; RequestMapping("/add")public String add(Home home, Model model) throws IOException{String sqlPath null;//定义文件保存的本地路径String localPath"D:\\AnZhuang\\Java项目\\选题\\Xin-…

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新

目录 A、组队 - 看图一眼出答案 B、不同子串 - 字符串模拟 set去重 C、数列求值 - 模拟取余 D、数的分解 - 三重暴力 E、迷宫 - bfs 判断路径 F、特别数的和 - 弱智模拟 G、外卖店优先级 - map 暴力&#xff08;90%通过率&#xff09; H、人物相关性分析 - A、组队 -…

【Linux】Linux网络总结图详解

网络是进行分层管理的应用层HTTPHTPPS 传输层&#xff08;UDP、TCP&#xff09;UDPTCPTCP和UDP对比 网络层IP 数据链路层&#xff08;MAC&#xff09;/物理层&#xff08;以太网&#xff09;以太网通信&#xff08;负责网卡之间&#xff09; 网络是进行分层管理的 应用层 HTTP…

UE4 HLSL学习笔记

在Custom配置对应ush文件路径 在HLSL中写入对应代码 Custom里面增加两个Input&#xff0c;名字必须和ush文件内的未知变量名字一样 然后就对应输出对应效果的颜色 这就是简单的加法运算 减法同理&#xff1a; 乘法除法同理 HLSL取最小值 HLSL取最大值 绝对值&#xff1a; 取余…

leetcode每日一题复盘(10.30~11.5)

leetcode 93 复原ip地址 这一题和之前的分割回文串有异曲同工之妙,都是给一组数据让你判断分割成几组小数据,代码主要分成三部分,用来判断的函数,回溯函数,主函数;最好是在原数据上面进行操作,我一开始就是新开了一个字符串做起来反而困难 首先说判断函数,这个根据题目我们可…

敲敲云零代码平台—近期亮点功能,让开发者对零代码心动~

近期敲敲云零代码平台&#xff0c;更新了很多实用新功能&#xff0c;包括汇总组件添加了筛选条件&#xff0c;增加了汇总日期控件&#xff0c;子表添加了批量添加和默认值等等。 1. 单选/多选/下拉选择 颜色设置 效果展示 在列表和表单中可通过不同颜色显示字段的不同等级或者…

Reading:Deep dive into the OnPush change detection strategy in Angular

原文连接&#xff1a;IndepthApp 今天深入阅读并总结Angualr中onPush更新策略。 1. 两种策略 & whats Lview&#xff1f; Angular 实现了两种策略来控制各个组件级别的更改检测行为。这些策略定义为Default和OnPush&#xff1a; 被定义为枚举&#xff1a; export enum…

CSS3弹性布局

2009年&#xff0c;W3C提出一种崭新的布局方案—弹性盒(Flexbox)布局&#xff0c;使用该模型可以轻松地创建自适应窗口的流动布局&#xff0c;或者自适应字体大小的弹性布局。W3C的弹性盒布局分为旧版本、新版本及混合过渡版本3种不同的设计方案&#xff0c;其中混合过渡版本主…

复杂任务也不怕!上海AI Lab提出增强型LLM框架—ControlLLM,大模型可操控多模态工具

多模态交互的一个新兴的实现方式是工具增强语言模型&#xff0c;这些模型将大型语言模型&#xff08;LLM&#xff09;作为主要控制器&#xff0c;并将具有不同功能的工具作为插件进行整合。这有助于解决各种多模态任务&#xff0c;并为多模态交互中的创新应用打开了大门。 尽管…

【设计模式】第11节:结构型模式之“装饰器模式”

一、简介 装饰器模式主要解决继承关系过于复杂的问题&#xff0c;通过组合来替代继承。它主要的作用是给原始类添加增强功能。这也是判断是否该用装饰器模式的一个重要的依据。除此之外&#xff0c;装饰器模式还有一个特点&#xff0c;那就是可以对原始类嵌套使用多个装饰器。…

呵护笔记本屏幕,同时获得更全方位的隐私保护

之前看到很多人都在给手机贴防窥膜&#xff0c;但是我试过之后觉得效果并不好。其实&#xff0c;防窥膜这个东西用在笔记本上会更实用一些。特别是那些经常在公共场所办公的朋友&#xff0c;比如我。最近我发现了一款威宝的防窥膜&#xff0c;质量非常靠谱。如果你也有同样的需…