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

C++를 사용하여 OpenCV에서 히스토그램 이퀄라이저를 적용하는 방법은 무엇입니까?

<시간/>

히스토그램은 이미지의 깊이 강도를 나타냅니다. 예를 들어, 색상 깊이가 8비트인 이미지를 고려하십시오. 이는 모든 픽셀이 0에서 0에서 255까지의 색상 깊이를 가질 수 있음을 의미합니다. 이미지가 RGB 이미지인 경우 빨강, 녹색 및 파랑 채널이 있습니다. 예를 들어, 이미지의 지점에는 빨간색만 있습니다. 그러면 해당 이미지의 색상 깊이가 빨간색 채널에 있으며 픽셀 값은 0에서 255까지 다양합니다. 0은 빨간색이 없음을 의미하고 255는 더 많은 읽기를 의미합니다.

히스토그램은 모든 채널과 모든 색상에 대해 이러한 종류의 결과를 보여줍니다. 픽셀 값을 변경하여 일부 특정 색상 픽셀의 강도를 변경할 수 있습니다. 예를 들어 빨간색 채널의 밀도를 높이고 싶다면 빨간색 채널의 값을 변경하면 됩니다.

먼저 회색 이미지에 히스토그램 이퀄라이저를 적용해 보겠습니다. 회색 이미지에는 흑백만 포함됩니다. 즉, 하나의 채널만 있습니다. 이미지는 8비트 이미지입니다. 색상 깊이가 0에서 255까지 다양함을 의미합니다. 0은 흰색을 의미하고 255는 검정색을 의미합니다. 다음 코드에서는 컬러 이미지를 로드하고 회색조로 변환합니다. 그런 다음 OpenCV의 'equalizeHist' 함수를 사용하여 픽셀 값을 균등화합니다.

다음 프로그램은 OpenCV에서 Histogram Equalizer를 적용하는 방법을 보여줍니다.

예시

#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main() {
   Mat original;//Declaring a matrix//
   original = imread("view.jpg");//loading the image
   Mat gray;//declaring a matrix//
   cvtColor(original, gray, COLOR_BGR2GRAY);//converting to grayscale//
   Mat hist;//declaring a matrix//
   equalizeHist(gray, hist);//applying histogram equalizer
   namedWindow("Original");//window for actual image//
   namedWindow("gray");//window for grayscale image//
   namedWindow("histogram");//window for histogram//
   imshow("Original", original);//showing actual image//
   imshow("gray", gray);//showing grayscale image//
   imshow("histogram", hist);//showing histogram effect
   waitKey(0);//wait for keystroke//
   return(0);
}

출력

C++를 사용하여 OpenCV에서 히스토그램 이퀄라이저를 적용하는 방법은 무엇입니까?