ग्रेस्केल इमेज में, पिक्सेल मान एकल संख्यात्मक मान होता है। लेकिन RGB इमेज जैसी रंगीन इमेज में, पिक्सेल तीन मानों वाला एक वेक्टर होता है। ये तीन मान तीन चैनलों को दर्शाते हैं।
यहां हम एक फ़ंक्शन बनाएंगे जो ग्रेस्केल इमेज और RGB इमेज दोनों के पिक्सेल मानों को एक्सेस करता है और इमेज पिक्सेल में यादृच्छिक रूप से शोर जोड़ता है। फिर हम परिणाम देखने के लिए main() फ़ंक्शन के अंदर फ़ंक्शन को कॉल करते हैं।
निम्नलिखित प्रोग्राम दर्शाता है कि OpenCV में 'at' मेथड का उपयोग करके पिक्सेल मान कैसे बदलें।
उदाहरण
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
void adding_Noise(Mat& image, int n) {
for (int x = 0; x < n; x++) {
int i = rand() % image.cols;
int j = rand() % image.rows;
if (image.channels() == 1) {
image.at<uchar>(j, i) = 0;
}
if (image.channels() == 3) {
image.at<Vec3b>(j, i)[0] = 0;
image.at<Vec3b>(j, i)[1] = 0;
image.at<Vec3b>(j, i)[2] = 0;
}
}
}
int main() {
Mat image;
Mat unchanged_Image;
image = imread("sky.jpg");
unchanged_Image = imread("sky.jpg");
namedWindow("Noisy Image");
namedWindow("Unchanged Image");
adding_Noise(image, 4000);
imshow("Noisy Image", image);
imshow("Unchanged Image", unchanged_Image);
waitKey(0);
destroyAllWindows();
return 0;
}
आउटपुट
