文章目录
-
-
- [1. 前置知识](#1. 前置知识)
- [2. 通过迭代器获取图像的像素](#2. 通过迭代器获取图像的像素)
-
1. 前置知识
-
🐧 什么叫做像素?
最小的 图像单元,每个像素可以看成图像中的一个点,它具有颜色、亮度等属性。
cv::Mat
是OpenCV
中用来处理图像数据的主要数据结构,他实质上是一个矩阵(二维数组) -
🍎 灰度图像
5 * 5 的矩阵,每个数字代表一个像素的亮度。
-
🍎 颜色图像
彩色图像的每个像素是由三个数值组成的向量(RGB)。
这里的向量指的是
RGB
三个颜色为一组。
2. 通过迭代器获取图像的像素
- 🍎 代码:
cpp
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
void ModifyColorData(Mat& inputImages, Mat& outputImages, int pixel);
int main(int argc, char* argv[])
{
// imread函数:读取一副图像
Mat myjpg = imread("test.jpg");
if (myjpg.empty()) {
cout << "\n,对不起读取的图片信息有误,请重新输入!";
return -1;
}
imshow("源图片效果", myjpg);
Mat targetimages;
targetimages.create(myjpg.rows, myjpg.cols, myjpg.type());
// 调用自定义函数
ModifyColorData(myjpg, targetimages, 2);
// waitKey() 函数,延时
waitKey(0);
return 0;
}
// 通过迭代器获取图像的像素
void ModifyColorData(Mat& inputImages, Mat& outputImages, int pixel)
{
outputImages = inputImages.clone();
Mat_<Vec3b>::iterator itbegin = outputImages.begin<Vec3b>();
Mat_<Vec3b>::iterator itend = outputImages.end<Vec3b>();
for (; itbegin != itend; itbegin ++) {
(*itbegin)[0] = (*itbegin)[0] / pixel * pixel + pixel / 3;
(*itbegin)[1] = (*itbegin)[1] / pixel * pixel + pixel / 3;
(*itbegin)[2] = (*itbegin)[2] / pixel * pixel + pixel / 3;
}
imshow("目标图像效果", outputImages);
}
- 🍎 效果展示: