【OpenCV基础】图像像素的读写操作

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处


图像像素的读写操作包括如何读取图像中的像素,以及写像素。

1.读像素

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

因此读像素,就是获取图像上某个点的像素值,也就是矩阵中某个位置的值。

2.相应API

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

先学习一下什么是Vec3b和uchar?

首先Vec3b和uchar都是数据类型。
Vec3b实质上是一个uchar的数组,等同于三个uchar数据。
那什么是uchar呢?uchar是无符号的整型数据类型,数值范围为0-255之间,刚好适用于图像的像素值。

Vec3b和uchar跟图像像素有什么关系?

对于彩色图像来说,由于它是三通道的,而每个通道都是由一个uchar来存放数据,因此一张彩色图像需要三个uchar来存放数据,即每一个像素的位置内含了3个uchar数据,所以对三通道获取像素值要使用Vec3b。

Vec3b与Vec3f

特别是在获取图像像素时候,获取图像像素点信息的时候,经常用到Vec3b与Vec3f。

Vec3b :对应三通道的顺序是bluegreenred的uchar类型数据。
Vec3f :对应三通道的float类型数据

2.1读取彩色图像的像素

Vec3b bgr = src.at<Vec3b>(row, col);

例如:

Vec3b i = src.at<Vec3b>(2, 2),能获取图像src中(22)位置的像素值,并存放在i这个数组中,

2.2读取单通道图像的像素

对于单通道,可以直接使用mat.at(row,col)即可获取像素值。

uchar s=Mat.at<uchar>(row,col)

例如:

uchar s = src.at<uchar>(2,2)

3.代码展示

#include<iostream>
#include<opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main()
{
	//分别建立一个单通道和三通道的图像,且像素值全部为0
	Mat src = Mat::zeros(5, 5, CV_8UC1);
	Mat dst = Mat::zeros(5, 5, CV_8UC3);
	cout << "src=" << src << endl;
	cout << "dst=" << dst << endl;

	//分别读取单通道和双通道图像在(2,2)位置的像素值
	uchar s = src.at<uchar>(2,2); //这里用了mat.at<Vec3b>(2, 2), 返回一个Vec3b类型的数组
	Vec3b d = dst.at<Vec3b>(2,2);
	
	//显示读取后的像素值
	cout << "s=" << (int)s << endl;//s是uchar型,是\0,即空格,无法在doc中显示,所以使用int强制转换。
	cout << "d=" << d << endl;
		
	waitKey(0);
	return 0;
}

在这里插入图片描述

reference

Opencv之是什么东东
OpenCV–001:图像像素的读写操作
opencv学习-004-图像像素的读写操作(Mat.at方法,案例实现图像的颜色反转(数组遍历和指针方式遍历))
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌小超

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值