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

C++를 사용하여 OpenCV에서 특정 픽셀의 값을 얻는 방법은 무엇입니까?

<시간/>

특정 픽셀의 값을 읽으려면 'at' 또는 '직접 접근' 방법을 사용할 수 있습니다. 여기에서 우리는 두 가지 접근 방식을 모두 배울 것입니다.

'at' 메서드부터 시작하겠습니다. 다음 프로그램은 RGB 이미지의 (10, 29) 위치에 있는 픽셀 값을 읽어옵니다.

예시

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main() {
   Mat image;//taking an image matrix//
   image = imread("sky.jpg");//loading an image//
   int x = image.at<Vec3b>(10, 29)[0];//getting the pixel values//
   int y = image.at<Vec3b>(10, 29)[1];//getting the pixel values//
   int z = image.at<Vec3b>(10, 29)[2];//getting the pixel values//
   cout << "Value of blue channel:" << x << endl;//showing the pixel values//
   cout << "Value of green channel:" << x << endl;//showing the pixel values//
   cout << "Value of red channel:" << x << endl;//showing the pixel values//
   system("pause");//pause the system to visualize the result//
   return 0;
}

출력

C++를 사용하여 OpenCV에서 특정 픽셀의 값을 얻는 방법은 무엇입니까?

프로그램 결과가 콘솔 창에 표시됩니다. 여기에서 다음 세 줄을 사용하여 세 가지 다른 채널의 픽셀 형식 값을 얻습니다.

int x = image.at<Vec3b>(10, 29)[0];
int y = image.at<Vec3b>(10, 29)[1];
int z = image.at<Vec3b>(10, 29)[2];

첫 번째 줄에서 첫 번째 채널(파란색)의 (10, 29)에 있는 픽셀 값을 읽고 'x' 변수에 값을 저장합니다. 두 번째와 세 번째 줄은 2 nd 값을 저장합니다. 및 3 번째 채널, 각각. 이제 '직접 접근' 방식을 사용하여 픽셀 값을 읽는 방법을 알아보겠습니다.

다음 프로그램은 (10, 29)에 있는 픽셀 값을 직접 읽는다 -

예시

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main() {
   Mat_<Vec3b>image;//taking an image matrix//
   image = imread("sky.jpg");//loading an image//
   Vec3b x = image(10, 29);//getting the pixel values//
   cout << x << endl;//showing the pixel values//  
   system("pause");//pause the system to visualize the result//
   return 0;
}

출력

C++를 사용하여 OpenCV에서 특정 픽셀의 값을 얻는 방법은 무엇입니까?