目录

一、前言

二、图像像素操作

1、读像素

2、写像素

三、全部代码及结果展示

1、代码

2、运行效果图


一、前言

欠下的总是要还的,继续给大家更新有关于OpenCV的教程,我也不知道能不能保证每天一篇,有时候真的是时间不够,希望能够得到大家的谅解,争取保证一周至少2-3篇吧。

今天要接着讲图像像素操作,与上一篇博客不同,这一篇会讲到操作每一个像素,包括读像素值、写像素值。

二、图像像素操作

1、读像素

1.读像素是什么?

二维图像保存在电脑中,大家可以理解为矩阵,一个二维数组,每个位置都会有一个像素值。

读像素,就是获取某个点处的像素值。

2.相应API

读取像素值时,不同的图像,读取过程有些差别。图像主要是两种:灰度图与RGB图,即黑白图像与彩色图像。

1.黑白图像

注意:y 是行,x 是列,所以先写 y ,再写 x 。

Scalar intensity = image.at<uchar>(y, x); //y 是行,x是列,所以先写y,再写x

如果是按照点去访问,就是按照坐标,先 x 后 y 。

Scalar intensity = img.at<uchar>(Point(x, y));

2.彩色图像

彩色图像有RGB三通道,

注意:顺序不是RGB,而是BGR

我们通过行指针,可以获取到该行的的所有点,即所有像素。

Vec3f intensity = image.at<Vec3f>(y, x);
float blue = intensity.val[0];  //蓝
float green = intensity.val[1];  //绿
float red = intensity.val[2];   //红

2、写像素

1.写像素是什么?

读像素是获取某一点的像素值,获取之后,我们就可以对像素值进行修改,这就是写像素,也可以叫修改像素。

2.写像素代码

1.修改像素值

修改像素值是在获取像素的基础上,进行赋值操作。

//灰度图像
image.at<uchar>(y, x) = 128;  //RGB三通道图像
image.at<Vec3b>(y,x)[0]=128; // blue
image.at<Vec3b>(y,x)[1]=128; // green
image.at<Vec3b>(y,x)[2]=128; // red

2.设置空白图像

设置空白图像是直接将图像的像素直接设为0。(当为0为黑色,全为255为白色)

image = Scalar(0);

运行结果如下图:

3.选取固定范围

选取固定范围是将图像中输入范围内的点切割出来,并删除掉剩余像素点。

Rect r(10, 10, 350, 200);  //设置选区
Mat smallImg = image(r);  //图像分割

三、全部代码及结果展示

1、代码

#include <opencv2/core/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>using namespace cv;
using namespace std;
int main(int argc, char** args) {Mat image = imread("E:/image/hand.jpg", IMREAD_COLOR);if (image.empty()) {cout << "could not find the image resource..." << std::endl;return -1;}//image = Scalar(0);int height = image.rows;int width = image.cols;int channels = image.channels();printf("height=%d width=%d channels=%d", height, width, channels);Rect r(10, 10, 350, 200);  //设置选区Mat smallImg = image(r);  //图像分割for (int row = 0; row < height; row++) {for (int col = 0; col < width; col++) {if (channels == 3) {image.at<Vec3b>(row, col)[0] = 0; // blueimage.at<Vec3b>(row, col)[1] = 0; // green}}}namedWindow("My Image", CV_WINDOW_AUTOSIZE);imshow("My Image", image);namedWindow("Small Image", CV_WINDOW_AUTOSIZE);imshow("Small Image", smallImg);waitKey(0);return 0;
}

2、运行效果图

写像素操作

选区分割

今天的内容就讲到这里啦,有什么问题,大家可以在下面留言哦!

【opencv学习笔记】005之读像素(获取像素)及写像素(修改像素、空白图像、分割图像)相关推荐

  1. 某人写的openCV学习笔记

    原文地址:某人写的openCV学习笔记作者:拔剑 http://blog.csdn.net/thefutureisour 我的OpenCV学习笔记(25):c++版本的高斯混合模型的源代码完全注释 之 ...

  2. 某人写的openCV学习笔记_拔剑-浆糊的传说_新浪博客

    http://blog.csdn.net/thefutureisour 我的OpenCV学习笔记(25):c++版本的高斯混合模型的源代码完全注释 之前看到过C版本的,感觉写的很长,没有仔细看,但是C ...

  3. OpenCV学习笔记(二):3种常用访问图像中像素的方式

    OpenCV学习笔记(二):3种常用访问图像中像素的方式 #include <opencv2/opencv.hpp>using namespace cv; using namespace ...

  4. OpenCV学习笔记02--图像像素处理--二值图像、灰度图像、彩色图像像素的处理、numpy.array中的对应的函数

    目录 (一)灰度图像像素处理 (二)彩色图像像素处理 (三)numpy.array库在图像处理中的应用 (四)查看图像的属性信息 接着笔记01继续总结,当我们读取一幅图像的时候,一般为二值图像.灰度图 ...

  5. OpenCV学习笔记(五十六)——InputArray和OutputArray的那些事core OpenCV学习笔记(五十七)——在同一窗口显示多幅图片 OpenCV学习笔记(五十八)——读《Mast

    OpenCV学习笔记(五十六)--InputArray和OutputArray的那些事core 看过OpenCV源代码的朋友,肯定都知道很多函数的接口都是InputArray或者OutputArray ...

  6. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  7. opencv学习笔记3:像素处理

    学习笔记,看的某宝的一个视频学习的 读取像素 返回值=图(位置参数) 灰度图读取像素 灰度度只有两维 d=img[78,155] print(d) 彩色图读取像素 彩色图 有三个通道. 注意openc ...

  8. opencv学习笔记之像素处理

    文章目录 前言 一.多通道的分离合并 多通道分离函数split() 多通道合并函数merge() 二.图像像素统计 计算图像的平均值和标准差 前言 记录opencv有关像素操作的一些函数和功能 一.多 ...

  9. OpenCV 学习笔记-day13 像素值统计 统计计算最大最小值,平均值和标准差 (minMaxLoc()和meanStdDev()函数的使用)

    OpenCV 学习笔记 day13 像素值统计 函数 minMaxLoc(); 最大值最小值统计 meanStdDev();平均值和标准方差统计 代码 day13 像素值统计 函数 minMaxLoc ...

  10. OpenCV学习笔记(五十一)——imge stitching图像拼接stitching OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。 OpenCV学习笔记(五

    OpenCV学习笔记(五十一)--imge stitching图像拼接stitching stitching是OpenCV2.4.0一个新模块,功能是实现图像拼接,所有的相关函数都被封装在Stitch ...

最新文章

  1. edgesForExtendedLayout
  2. VC++程序中用PlaySound函数加入自定义声音
  3. jQuery - 获取并设置 CSS 类
  4. Karp 21个规约问题 笔记 (1~13个规约问题)
  5. Elasticsearch - cluster_block_exception [FORBIDDEN/12/index read-only / allow delete (api)]
  6. Django中--使用redis存储历史浏览记录
  7. .NET简谈事务、分布式事务处理
  8. springboot redis token_Spring Boot+Redis 扛住,瞬间千次重复提交(实例)
  9. web.xml 详细介绍
  10. PAT (Basic Level) Practice1008 数组元素循环右移问题
  11. bzoj 1019: [SHOI2008]汉诺塔
  12. 97年世界黑客编程大赛冠军作品(大小仅为16KB),惊艳世界的编程巨作
  13. 红米note4手机怎么屏幕录制视频
  14. mysql自定义函数的分号_Mysql自定义函数
  15. python 全栈开发,Day88(csrf_exempt,ES6 快速入门,Vue)
  16. 【JSP笔记02】JSP注释、脚本、表达式、JSP三大指令、JSP七大动作的介绍及使用
  17. 法国内政部选择IDEMIA和Sopra Steria为其开发新标准边境管制系统
  18. 织梦CMS建站入门学习(二)
  19. 解决使用yum安装软件时出现GPG-Key的问题
  20. C# TSC TE244 PrintDocument 固定资产哑银不干胶标签打印

热门文章

  1. [PMP]组织过程资产与事业环境因素的区别
  2. Python·isinstance
  3. 爱奇艺边缘计算探索与实践
  4. 愤怒的小鸟4只编外鸟_愤怒的小鸟思黛拉四种小鸟攻略 技能详细解析
  5. android sin 曲线,Android 贝塞尔曲线实践——旋转的七色花朵
  6. 这些硬盘参数你都懂得吗?(下篇)
  7. html5专题总结报告,html5最全总结.doc
  8. GT928 TP驱动跟读及虚拟按键上报解析
  9. 学习TypeScript之类的概念
  10. 【91xcz】缓存文件目录修改方法一览