opencv學習(2)新增椒鹽噪聲
阿新 • • 發佈:2019-01-05
椒鹽噪聲點均選擇4000個。
#include <opencv2\opencv.hpp> #include <opencv2\core\core.hpp> #include <opencv2\highgui\highgui.hpp> #include <iostream> //using namespace std; using namespace cv; void salt(Mat &img, int n); void pepper(Mat &img, int n); //本程式是一個新增椒鹽噪聲的程式 int main() { Mat zImg = imread("D:/fodder/2.jpg");//注意資料夾啊,要寫兩槓;或者將斜槓換一個方向 //Mat zSP; if(zImg.data) { salt(zImg, 4000); pepper(zImg, 4000); namedWindow("Salt&&Pepper Window"); imshow("Salt&&Pepper Window", zImg); imwrite("新增椒鹽噪聲的影象.jpg",zImg); waitKey(0); destroyAllWindows(); } else std::cout << "Open Image Error!" << std::endl; return 0; } void salt(Mat &img, int n) { for(int k=0; k<n; k++) { int i = rand()%img.cols; int j = rand()%img.rows; if(img.channels() == 1) { img.at<uchar>(j,i) = 255; } else if(img.channels() == 3) { img.at<cv::Vec3b>(j,i)[0] = 255; img.at<cv::Vec3b>(j,i)[1] = 255; img.at<cv::Vec3b>(j,i)[2] = 255; } } } void pepper(Mat &img, int n) { for(int k=0; k<n; k++) { int i = rand()%img.cols; int j = rand()%img.rows; if(img.channels() == 1) { img.at<uchar>(j,i) = 0; } else if(img.channels() == 3) { img.at<cv::Vec3b>(j,i)[0] = 0; img.at<cv::Vec3b>(j,i)[1] = 0; img.at<cv::Vec3b>(j,i)[2] = 0; } } }