700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python opencv图像对比度_OpenCV基础(四)---图像对比度 亮度调整

python opencv图像对比度_OpenCV基础(四)---图像对比度 亮度调整

时间:2023-03-23 08:08:54

相关推荐

python opencv图像对比度_OpenCV基础(四)---图像对比度 亮度调整

图像对比度,亮度调整

图像对比度,指不同像素间的差值,差值越大,对比度越大.

图像亮度,对于RGB图像,亮度最大为(255,255,255),最暗为(0,0,0).

调整公式如上,f(x)为源图像,g(x)为输出图像

α为增益,用于设置图像对比度

β为偏置,用于调整图像亮度

函数介绍:createTrackbar()

这里创建了两个滑动条,用于调整α,β

函数原型: int createTrackbar(const String& trackbarname, const String& winname,

int* value, int count,

TrackbarCallback onChange = 0,

void* userdata = 0);

参数说明:

const String& trackbarname:滑动条的名字

const String& winname:窗口的名称,该窗口将用作创建的滑动条的父窗口

int* value:值可选指针,指向一个整型变量,其值反映滑块的位置。创建时,滑块位置由该变量定义

int count:滑块的最大位置。最小位置总是0。

TrackbarCallback onChange = 0:指针指向每次滑块改变位置时要调用的函数。这个函数的原型应该是void Foo(int,void\*);,其中第一个参数是trackbar位置,第二个参数是用户数据(参见下一个参数)。如果回调是空指针,则不调用回调,只更新值

void* userdata = 0: 作为回调函数传递的用户数据。它可以在不使用全局变量的情况下处理trackbar事件

代码演示

1 #include

2 #include

3

4 using namespacestd;5 using namespacecv;6

7 Mat src, dst;8 const char * contrast_bar = "对比度";9 const char * bright_bar = "亮度";10 const char * window_name = "效果图";11 intcontrast_value;12 intbright_value;13 int max_contrast = 200; //最大对比度,为2倍

14 int max_bright = 100; //最大偏置

15 intchannels;16 static void adjustContrastAndBright(int, void *);17

18 intmain()19 {20 src = imread("D:/xiaobai.png");21 if(src.empty()) {22 cout << "could not load image..." <

28 contrast_value = 100; //设置初始对比度

29 bright_value = 0; //设置初始亮度

30

31 namedWindow(window_name, CV_WINDOW_AUTOSIZE);32

33 //创建轨迹条

34 createTrackbar(contrast_bar, window_name, &contrast_value, max_contrast, adjustContrastAndBright);35 createTrackbar(bright_bar, window_name, &bright_value, max_bright, adjustContrastAndBright);36

37 //调用回调函数

38 adjustContrastAndBright(contrast_value, 0);39 adjustContrastAndBright(bright_value, 0);40

41 waitKey(0);42 return 0;43 }44

45 static void adjustContrastAndBright(int, void *)46 {47 switch(channels)48 {49 case 1:50 for (int row = 0; row < src.rows; row++)51 for (int col = 0; col < src.cols; col++){52 float v = src.at(row, col);53 //saturate_cast 限制结果在0-255之间

54 dst.at(row, col) = saturate_cast(v * contrast_value * 0.01 + bright_value); //调整

55 }56 case 3:57 for (int row = 0; row < src.rows; row++)58 for (int col = 0; col < src.cols; col++) {59 float b = src.at(row, col)[0];//blue

60 float g = src.at(row, col)[1]; //green

61 float r = src.at(row, col)[2]; //red62 //调整

63 dst.at(row, col)[0] = saturate_cast(b * contrast_value * 0.01 +bright_value);64 dst.at(row, col)[1] = saturate_cast(g * contrast_value * 0.01 +bright_value);65 dst.at(row, col)[2] = saturate_cast(r * contrast_value * 0.01 +bright_value);66 }67 }68 imshow(window_name, dst);69 }

原始图像

效果图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。