opencv 학습 노트 (16) - 이미지 대비 도와 밝기 값

4213 단어 opencv
이론 분석
이미지 밝기 와 대비 도 에 대한 조정 은 주로 상 수 를 더 하거나 곱 하 는 것 이 고 이론 공식 은 다음 과 같다.
g(x,y)<c> = a*f(x,y)<c>+b
  • f (x, y) < c > 는 원본 이미지 x 줄, y 열 픽 셀 점 c 채널 의 값
  • 을 대표 합 니 다.
  • g (x, y) < c > 는 출력 이미지 x 줄, y 열 픽 셀 점 c 채널 의 값
  • 을 대표 합 니 다.
  • a (a > 0) 는 보통 이득 (확대 배수) 이 라 고 부 르 며 이미지 의 대 비 를 제어 합 니 다 (결 과 를 관찰 하기 위해 보통 0.0 에서 3.0 사이 로 설정 합 니 다)
  • b 는 보통 편향 이 라 고 불 리 며 이미지 의 밝 기 를 조절 한다
  • .
    규칙:
    #include
    
    static void on_ContrastAndBright(int, void*);
    
    int g_nContrastValue;
    int g_nBrightValue;
    cv::Mat g_srcImage, g_dstImage;
    
    int main()
    {
        g_srcImage = cv::imread("   .jpg");
        if (!g_srcImage.data)   { printf("       !"); return 0; }
        g_dstImage = cv::Mat::zeros(g_srcImage.size(), g_srcImage.type());
    
        g_nContrastValue = 80;
        g_nBrightValue = 80;
    
        cv::namedWindow("【   】", 1);
    
        cv::createTrackbar("   :", "【   】", &g_nContrastValue, 300, on_ContrastAndBright);
        cv::createTrackbar("    :", "【   】", &g_nBrightValue, 200, on_ContrastAndBright);
    
        on_ContrastAndBright(g_nContrastValue, 0);
        on_ContrastAndBright(g_nBrightValue, 0);
        while (char(cv::waitKey(1)) != 'q') {}
        return 1;
    
    }
    
    static void on_ContrastAndBright(int, void*)
    {
        cv::namedWindow("【   】");
        for (int y = 0; y < g_srcImage.rows; y++)
        {
            for (int x = 0; x < g_srcImage.cols; x++)
            {
                for (int c = 0; c < 3; c++)
                {
                    g_dstImage.at<cv::Vec3b>(y, x)[c] = cv::saturate_cast((g_nBrightValue*0.01)*(g_srcImage.at<cv::Vec3b>(y, x)[c]) + g_nContrastValue);
                    //saturate_cast       ,     uchar  
                }
            }
        }
        imshow("【   】", g_srcImage);
        imshow("【   】", g_dstImage);
    }

    좋은 웹페이지 즐겨찾기