本节内容:
- 访问像素值
- 用指针扫描图像
- 用迭代器扫描图像
- 编写高效的图像扫描循环
- 扫描图像并访问相邻像素
- 实现简单的图像运算
- 图像重映射
访问像素值
准备工作:
创建一个简单函数,用它在图像中加入椒盐噪声.
实现如下:
void salt(cv::Mat image, int n){ int i, j; for(int k = 0; k < n; k ++){ i = std::rand()%image.cols; j = std::rand()%image.rows; if(image.type() == CV_8UC1){ //灰度图 image.at<uchar>(j,i) = 255; }else { image.at<cv::Vec3b>(j,i)[0] = 255; image.at<cv::Vec3b>(j,i)[1] = 255; image.at<cv::Vec3b>(j,i)[2] = 255; } } }
完整代码:
#include <cstdlib> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> void salt(cv::Mat image, int n){ int i, j; for(int k = 0; k < n; k ++){ i = std::rand()%image.cols; j = std::rand()%image.rows; if(image.type() == CV_8UC1){ //灰度图 image.at<uchar>(j,i) = 255; }else { image.at<cv::Vec3b>(j,i)[0] = 255; image.at<cv::Vec3b>(j,i)[1] = 255; image.at<cv::Vec3b>(j,i)[2] = 255; } } } int main(){ cv::Mat image = cv::imread("./data/rgb.png"); salt(image,3000); cv::namedWindow("image"); cv::imshow("Image", image); cv::waitKey(0); cv::imwrite("./data/output.png", image); return 0; }