04 图像像素的读写操作
opencv知识点:
- 获取/改变图像的某个像素 - Mat::at
- 图像像素 - 数组遍历
- 图像像素 - 指针遍历
本课所解决的问题:
-
如何获取/改变图像的某个像素?
-
如何利用数组遍历图像像素?
-
如何利用指针遍历图像像素?
1.获取某个像素
我们获取/改变图像的某个像素,要用到Mat::at< >( )
image.at<uchar>(row, col);
/*
获取指定位置的像素值
这里只是at方法的一种演示,一共6种传参方式,具体可查看文档
说明:
at<>中必须标明矩阵的数据类型,一般图像是uchar(8位无符号整型)类型
这里我们采用二维度坐标的方式传参
*/
2.图像像素的数组遍历
为了演示图像像素遍历,我们在遍历的同时进行一个反色处理
程序
main.cpp
#include "opencv2/opencv.hpp"
#include "quickopencv.h"
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat src = imread("C:/Users/LZQ/Desktop/lena.png"); // B, G, R
if (src.empty()) {
printf("could not load image....\n");
return -1;
}
imshow("输入窗口", src);
QuickDemo qd;
qd.pixel_visit_demo(src); //04 <-------------修改的代码(其余不变)
waitKey(0);
destroyAllWindows();
return 0;
}
quickdemo.cpp
#include "quickopencv.h"
#include <opencv2/dnn.hpp>
using namespace cv;
using namespace std;
/*****************************************************************/
void QuickDemo::pixel_visit_demo(Mat& image) {
int w = image.cols; //宽度
int h = image.rows; //高度
int dims = image.channels