OpenCV中简单的添加噪声
随机数生成器用到的是C++11中的新方法。
以下代码来自OpenCV计算机视觉编程攻略第三版2.2.2节
void salt(Mat image, int n) { default_random_engine generator; uniform_int_distribution<int> randomRow(0, image.rows - 1); uniform_int_distribution<int> randomCol(0, image.cols - 1); int i, j; for (int k = 0; k < n; k++) { //随机生成图形位置 i = randomCol(generator); j = randomRow(generator); if (image.type() == CV_8UC1) //灰度图像 { //单通道8位图像 image.at<uchar>(j, i) = 255; } else if (image.type() == CV_8UC3) // 彩色图像 { //3通道图像 image.at<cv::Vec3b>(j, i)[0] = 255; image.at<cv::Vec3b>(j, i)[1] = 255; image.at<cv::Vec3b>(j, i)[2] = 255; } } }
这里传参用的是值传递的方式,之所以可以这样做是因为在复制图像时共享的是同一块数据。