Computer >> Máy Tính >  >> Lập trình >> C ++

Làm cách nào để thay đổi Giá trị Pixel bằng Phương thức 'at' trong OpenCV?

Trong hình ảnh thang độ xám, giá trị pixel là một giá trị số duy nhất. Nhưng trong một hình ảnh màu, chẳng hạn như hình ảnh RGB, pixel là một vectơ có ba giá trị. Ba giá trị này đại diện cho ba kênh.

Ở đây chúng ta sẽ tạo một hàm truy cập cả giá trị pixel ảnh thang độ xám và ảnh RGB và thêm nhiễu ngẫu nhiên vào pixel ảnh. Sau đó, chúng ta gọi hàm bên trong hàm main () để quan sát kết quả.

Chương trình sau đây trình bày cách thay đổi Giá trị Pixel bằng phương thức 'at' trong OpenCV.

Ví dụ

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;//Declaring cv namespace
using namespace std;
void adding_Noise(Mat& image, int n){ //'adding_Noise' function//
   for (int x = 0; x < n; x++){ //initiating a for loop//
      int i = rand() % image.cols;//accessing random column//
      int j = rand() % image.rows;//accessing random rows//
      if (image.channels() == 1){ //apply noise to grayscale image//
         image.at<uchar>(j, i) = 0;//Changing the value of pixel//
      }
      if (image.channels() == 3){ //apply noise to RGB image//
         image.at<Vec3b>(j, i)[0] = 0;//Changing the value of first channel//
         image.at<Vec3b>(j, i)[1] = 0;//Changing the value of first channel//
         image.at<Vec3b>(j, i)[2] = 0;//Changing the value of first channel//
      }
   }
}
int main() {
   Mat image;//taking an image matrix//
   Mat unchanged_Image;//taking another image matrix//
   image = imread("sky.jpg");//loading an image//
   unchanged_Image = imread("sky.jpg");//loading the same image//
   namedWindow("Noisy Image");//Declaring an window//
   namedWindow("Unchanged Image");//Declaring another window//
   adding_Noise(image, 4000);//calling the 'adding_Noise' function//
   imshow("Noisy Image", image);//showing the Noisy image
   imshow("Unchanged Image",unchanged_Image);//showing the unchanged image//
   waitKey(0);//wait for Keystroke//
   destroyAllWindows();//return all allocated memory
   return 0;
}

Đầu ra

Làm cách nào để thay đổi Giá trị Pixel bằng Phương thức  at  trong OpenCV?