本节内容:

  • 访问像素值
  • 用指针扫描图像
  • 用迭代器扫描图像
  • 编写高效的图像扫描循环
  • 扫描图像并访问相邻像素
  • 实现简单的图像运算
  • 图像重映射

 

 访问像素值

  准备工作:

    创建一个简单函数,用它在图像中加入椒盐噪声.

    实现如下:

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;
}
View Code

相关文章: