文章目录

  • 前言
  • 一、访问图像像素
    • 1.访问(j,i)处像素
    • 2.例子:在图像中加入白色椒盐噪声
  • 二、遍历图像像素
    • 1.指针扫描
    • 2.opencv自带的卷积运算:filter2D

前言

数字图像处理c++ opencv(VS2019 opencv4.53)持续更新


一、访问图像像素

1.访问(j,i)处像素

以8位(0~255)灰度图像和BGR彩色图像为例,用at可以访问图像像素:

//灰度图像:
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分量

2.例子:在图像中加入白色椒盐噪声

1.创建Salt头文件

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

2.创建Salt源文件

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

3.示例

#include<iostream>
#include<opencv2/opencv.hpp>
#include "Salt.h"using namespace cv;
using namespace std;int main()
{ Mat image1 = imread("lena.png");  //读取图像;if (image1.empty()){cout << "读取错误" << endl;return -1;}imshow("image1", image1);  //显示原图像;Salt(image1, 5000); //加入5000个噪声点imshow("image2", image1);  //显示噪声图像;waitKey(0);  //暂停,保持图像显示,等待按键结束return 0;
}


二、遍历图像像素

1.指针扫描

以下面模板对图像进行扫描运算为例:

#include<iostream>
#include<opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{ Mat image1, output_image;   //定义输入图像和输出图像image1 = imread("lena.png");  //读取图像;if (image1.empty()){cout << "读取错误" << endl;return -1;}output_image = Mat(image1.size(), image1.type());  //定义输出图像大小output_image = image1.clone();   //克隆原图像素值int rows = image1.rows;    //原图行数int stepx = image1.channels();   //原图通道数int cols = (image1.cols) * image1.channels();  //矩阵总列数,在BGR彩色图像中,每个像素的BGR通道按顺序排列,因此总列数=像素宽度*通道数for (int row =1 ; row < (rows - 1); row++)   //对行遍历{const uchar* previous = image1.ptr<uchar>(row - 1);  //原图上一行指针const uchar* current = image1.ptr<uchar>(row);       //原图当前行指针const uchar* next = image1.ptr<uchar>(row + 1);      //原图下一行指针uchar* output = output_image.ptr<uchar>(row);        //输出图像当前行指针for (int col = stepx; col < (cols- stepx); col++)  //对列遍历{output[col] = saturate_cast<uchar>(5*current[col] - (previous[col]+ current[col- stepx]+ current[col + stepx]+ next[col]));//saturate_cast<uchar>(a),当a在0—255时输出a,当a小于0输出0,当a大于255输出255,保证a的值在0~255之间}}imshow("image1", image1);imshow("output_image", output_image);waitKey(0);  //暂停,保持图像显示,等待按键结束return 0;
}

结果:


2.opencv自带的卷积运算:filter2D

上面的方法可以简化为:

#include<iostream>
#include<opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{ Mat image1, output_image;   //定义输入图像和输出图像image1 = imread("lena.png");  //读取图像;if (image1.empty()){cout << "读取错误" << endl;return -1;}Mat kernel = (Mat_<char>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);  //创建滤波器filter2D(image1, output_image, image1.depth(), kernel);  //卷积imshow("image1", image1);imshow("output_image", output_image);waitKey(0);  //暂停,保持图像显示,等待按键结束return 0;
}

c++ opencv数字图像处理:访问图像像素,遍历图像像素相关推荐

  1. 《opencv 数字图像处理 图像基础》

    <opencv 数字图像处理 图像基础> 矩阵 通道分离和合并 彩色图像转灰度图像 灰度图转二值化图像 图像运算 矩阵 定义一个显示图像的函数,对于灰度图,里面添加了vmin=0,vmax ...

  2. OpenCV数字图像处理基于C++:灰度变换

    OpenCV数字图像处理基于C++:灰度变换 1.1 灰度变换概念 在图像预处理中,图像的灰度变换是图像增强的重要手段,灰度变换可以使图像对比度扩展,图像清晰,特征明显,灰度变换主要利用点运算来修正像 ...

  3. 数字图像处理笔记(一)——图像存储空间,分辨率,图像内插

    数字图像处理笔记(一)--图像存储空间,分辨率,图像内插 本系列笔记是笔者在学习冈萨雷斯<数字图像处理>第三版时做的总结,日后看的时候方便点,如果有幸得到大家的讨论,喜上眉梢. 本节参考书 ...

  4. OpenCV数字图像处理学习平台

    原始图像1-1 处理中的图像1-2 处理结果1-3(检测到所有圆) OpenCV数字图像处理学习平台,是一款可视化.交互式方式学习OpenCV的工具软件,由资深计算机视觉专家精心打造,花费近两年整理成 ...

  5. 图像处理边缘增强matlab,数字图像处理实验 matlab 图像增强 边缘检测 图像操作.doc...

    数字图像处理实验 matlab 图像增强 边缘检测 图像操作 实验1 点运算和直方图处理 实验目的 1. 掌握利用Matlab图像工具箱显示直方图的方法 2. 掌握运用点操作进行图像处理的基本原理. ...

  6. c++ opencv数字图像处理:频率域滤波--高通滤波--高斯高通滤波

    文章目录 前言 一.高斯高通滤波器(GHPF) 二.代码 前言 数字图像处理c++ opencv(VS2019 opencv4.53)持续更新 一.高斯高通滤波器(GHPF) D 2 ( u , v ...

  7. c++ opencv数字图像处理:频率域滤波--低通滤波--理想低通滤波

    文章目录 前言 一.理想低通滤波器(ILPF) 二.代码 三.说明 前言 数字图像处理c++ opencv(VS2019 opencv4.53)持续更新 一.理想低通滤波器(ILPF) 通过设置频率半 ...

  8. c++ opencv数字图像处理:频率域滤波--低通滤波--巴特沃斯低通滤波

    文章目录 前言 一.巴特沃斯低通滤波器(BLPF) 二.代码 三.说明 前言 数字图像处理c++ opencv(VS2019 opencv4.53)持续更新 一.巴特沃斯低通滤波器(BLPF) D2( ...

  9. c++ opencv数字图像处理:频率域滤波--高通滤波--巴特沃斯高通滤波

    文章目录 前言 一.巴特沃斯高通滤波器(BHPF) 二.代码 前言 数字图像处理c++ opencv(VS2019 opencv4.53)持续更新 一.巴特沃斯高通滤波器(BHPF) D2(u,v)为 ...

最新文章

  1. Dubbo原理何源码解析之服务暴露
  2. CSP认证201712-4 行车路线[C++题解]:单源最短路变型、拆点、好题!
  3. MySQL索引下推(5.6版本+)
  4. js获取int类型长度_js代码比较大小前需要把string转换int
  5. CSS清除行内元素之间的HTML空白
  6. srsLTE源码学习:度量中心:metrics_hub.h
  7. 今后几个月的IT读书计划
  8. c++ 编译时检测结构体大小的的宏定义写法
  9. Delphi XE DataSnap三层开发实务
  10. 程序员女朋友都是在哪找的?
  11. 如何创建一个不确定长度的数组
  12. 快速上手TiDB,体验全新的一栈式实时HTAP数据库
  13. Python就业前景怎么样
  14. 蓝牙芯片支持音频传输,播放U盘TF卡,还能传输数据透传串口控制
  15. python最小二乘法拟合圆_最小二乘法拟合圆
  16. Python学习日志08 - 字典
  17. 16个很好的在线教育网站
  18. Six Sigma点滴
  19. Python脚本猜解网站登录密码(带token验证)
  20. 关于电脑全局Ctrl+z 组合键达不到撤销功能的解决办法

热门文章

  1. 关于软件设计那些事---正交设计
  2. 20160807_第一周周报
  3. Pinyin Comparison 拼音辨别 V1.3
  4. ImageIO.framework
  5. 5个超实用视频素材网站,免费下载~
  6. java编程输入学生成绩 判断最高分,java代码初学者适用,输入学生成绩,符合要求的过~~~~注意数据范围...
  7. 使用Python中的pytesseract模块实现抓取图片中文字
  8. html 验证邮箱地址,利用javascript验证邮箱地址是否合法
  9. VS2012 asp.net开发之“IIS配置网站”
  10. adb 命令启动app