opencv實現色彩還原(白平衡)

2021-09-24 22:16:50 字數 1472 閱讀 4030

目錄

0 說明

1 效果

2 **實現

2.1 我的實現

2.2 其他方法

目前很多攝像頭特別是網路攝像頭對色彩的處理情況存在色差,比如乙個橙子(是黃色的),但是拍出來的效果會泛白,有點像梨子的顏色,因此要用到色彩校正。

一般色彩校正使用白平衡,白平衡一般又分為:灰世界、完美反射、等,這裡不做具體陳述。

此處提供了一種方法,總體原理為(對每個通道而言):

1)對偏暗和偏亮的顏色進行特定的處理:指定乙個特定的畫素值;

2)對其他畫素值進行小幅度拉伸;

3)最後三個通道合併即為最終結果。

注意:偏暗和偏亮得界限是不對稱的,可以同通過改變**中的s實現。

具體計算方式可以看原始碼(c語言實現,非c++)。

調整引數s以符合自己效果

/*

對偏暗和偏亮的的畫素進行處理,對其他畫素進行拉伸

偏暗和偏亮的判定可以通過調整下面的s進行調整,注意偏暗和偏亮是不對稱的

*/#include #include using namespace cv;

using namespace std;

void color_balance(iplimage *img)

;//直方圖統計每個畫素值的數目

int num_of_pixels = img->width*img->height;

//統計每個畫素值的數目

for (int y = 0; y < img->height; ++y) }

//統計當前畫素值和之前畫素值的總數

for (int i = 1; i < 256; ++i)

histo[i] = histo[i] + histo[i - 1];

double s = 0.0265;//此引數可以調整,最好在0.1以下(0=cvround(num_of_pixels*(1 - s / 2)))

if (vmax < 255 - 1)

vmax = vmax + 1;

//處理影象中畫素值大於vmin和小於vmax的畫素,

//即處理偏亮和偏暗的區域

for (int y = 0; y < img->height; ++y) }

//對其他的畫素進行處理(拉伸),其實可以合併到上一步,簡化時間複雜度,這裡分開只是為了讓過程更清楚

for (int y = 0; y < img->height; ++y) }

} int main()

灰世界--->這個**對有些情況下效果不好

#include #include using namespace cv;

int main()

OpenCV色彩識別

hsv模型中顏色的引數分別是 色調 h hue 飽和度 s saturation 亮度 v value 由a.r.smith在1978年建立的一種顏色空間,也稱六角錐體模型 hexcone model 設 r,g,b 分別是乙個顏色的紅 綠和藍座標,它們的值是在 0 到 1 之間的實數。設 max ...

Open CV 色彩空間

顏色空間按照基本結構可以分兩大類 基色顏色空間 和 色 亮分離顏色空間。前者的典型是 rgb,還包括 cmy cmyk cie xyz 等 後者包括 ycc yuv lab 以及一批 色相類顏色空間 cie xyz 是定義一切顏色空間的基準,很奇妙的是,它即屬於基色顏色空間,也屬於色 亮分離顏色空間...

opencv之偽色彩

opencv之偽色彩 引數 src 源影象 灰度圖或彩色圖 cv 8uc1 or cv 8uc3 dst 在源影象上進行色彩對映後的結果影象。colormap 提供的色彩圖 值。例子 import cv2 偽色彩 顯示影象 cv2.imshow input img cv2.imshow dst co...