Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

OpenCV에서 'at' 메서드를 사용하여 픽셀 값을 변경하는 방법은 무엇입니까?

<시간/>

회색조 이미지에서 픽셀 값은 단일 숫자 값입니다. 그러나 RGB 이미지와 같은 컬러 이미지에서 픽셀은 3개의 값을 갖는 벡터입니다. 이 세 가지 값은 세 개의 채널을 나타냅니다.

여기에서 회색조 이미지와 RGB 이미지 픽셀 값에 모두 액세스하고 이미지 픽셀에 무작위로 노이즈를 추가하는 함수를 만들 것입니다. 그런 다음 결과를 관찰하기 위해 main() 함수 내에서 함수를 호출합니다.

다음 프로그램은 OpenCV에서 'at' 메소드를 사용하여 픽셀 값을 변경하는 방법을 보여줍니다.

예시

#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;
}

출력

OpenCV에서  at  메서드를 사용하여 픽셀 값을 변경하는 방법은 무엇입니까?