opencv
Kontrast i jasność w C ++
Szukaj…
Składnia
- void cv :: Mat :: convertTo (OutputArray m, int rtype, double alpha = 1, double beta = 0) const
Parametry
Parametr | Detale |
---|---|
m | macierz wyjściowa; jeśli przed operacją nie ma odpowiedniego rozmiaru lub typu, zostaje ponownie przydzielony |
typ | pożądany typ macierzy wyjściowej, a raczej głębokość, ponieważ liczba kanałów jest taka sama jak na wejściu; jeśli typ jest ujemny, macierz wyjściowa będzie miała ten sam typ co dane wejściowe |
alfa | opcjonalny współczynnik skali. Zmienia to kontrast obrazu. Wartości poniżej 1 zmniejszają kontrast, a powyżej jednego zwiększają kontrast |
beta | opcjonalna delta dodana do skalowanych wartości. Wartości dodatnie zwiększają jasność, a wartości ujemne zmniejszają jasność |
Uwagi
Kontrast :
Kontrast to różnica w luminancji lub kolorze, która sprawia, że obiekt (lub jego reprezentacja na obrazie lub wyświetlaczu) jest rozpoznawalny. Im większa różnica między pikselem a jego sąsiadami, tym większy kontrast w tym obszarze.
Jasność :
Innymi słowy, jasność to percepcja wywołana przez luminancję celu wizualnego. Pod względem pikseli, im wyższa wartość piksela, tym jaśniejszy jest piksel.
Regulacja kontrastu i jasności:
g (i, j) = α.f (i, j) + β
f(x)
jako piksele obrazu źródłowego i g(x)
jako piksele obrazu wyjściowego.
i
oraz j
wskazują, że piksel znajduje się w i-tym rzędzie i j-tej kolumnie.
Parametry α > 0
i β
są często nazywane parametrami wzmocnienia i polaryzacji; czasami mówi się, że te parametry odpowiednio kontrolują kontrast i jasność .
Opencv ma funkcję o nazwie convertTo (), która może zastosować te dwie operacje.
Źródła: http://docs.opencv.org/trunk/d3/d63/classcv_1_1Mat.html#adf88c60c5b4980e05bb556080916978b http://opencv-srf.blogspot.ca/2013/07/change-contrast-of-image-or-video .html http://opencv-srf.blogspot.ca/2013/07/change-brightness.html
Regulacja jasności i kontrastu obrazu w c ++
// main.cpp : Defines the entry point for the console application.
//
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, const char** argv)
{
Mat img = imread("lena30.jpg", CV_LOAD_IMAGE_COLOR); //open and read the image
if (img.empty())
{
cout << "Image cannot be loaded..!!" << endl;
return -1;
}
Mat img_higher_contrast;
img.convertTo(img_higher_contrast, -1, 2, 0); //increase the contrast (double)
Mat img_lower_contrast;
img.convertTo(img_lower_contrast, -1, 0.5, 0); //decrease the contrast (halve)
Mat img_higher_brightness;
img.convertTo(img_higher_brightness, -1, 1, 20); //increase the brightness by 20 for each pixel
Mat img_lower_brightness;
img.convertTo(img_lower_brightness, -1, 1, -20); //decrease the brightness by 20 for each pixel
//create windows
namedWindow("Original Image", CV_WINDOW_AUTOSIZE);
namedWindow("High Contrast", CV_WINDOW_AUTOSIZE);
namedWindow("Low Contrast", CV_WINDOW_AUTOSIZE);
namedWindow("High Brightness", CV_WINDOW_AUTOSIZE);
namedWindow("Low Brightness", CV_WINDOW_AUTOSIZE);
//show the image
imshow("Original Image", img);
imshow("High Contrast", img_higher_contrast);
imshow("Low Contrast", img_lower_contrast);
imshow("High Brightness", img_higher_brightness);
imshow("Low Brightness", img_lower_brightness);
waitKey(0); //wait for key press
destroyAllWindows(); //destroy all open windows
return 0;
}
Wynik programu: