opencv--影象色彩和對比度
阿新 • • 發佈:2018-11-19
處理影象經常會對影象色彩進行增強,這就是改變影象的亮度和對比度。本章基於opencv對影象的亮度和對比度進行處理操作。其實,這是對影象的每一個畫素點進行相應的操作。
在這個公式中
- alpha
第一個引數α必須是大於零,不然則基本上沒有意義了。
α能使影象畫素成倍數的增長或降低(α<1),改變了是影象的對比度,因為使影象的差值變化了。 - beta
β可為負,也可為正。
任何一個畫素都在(0, 255)之間,加上一個值或減去一個值則會使這個畫素點變大或變小,其實就是向白色或向黑色靠近(0為黑,255為白),所以改變的是影象的亮度。
相關函式
例項
int main() {
Mat src,src1 ,dst;
src = imread("D:/test/first.png",0);
if (!src.data) {
cerr << "open error" << endl;
return -1;
}
dst = Mat::zeros(src.size(), src.type());
float alpha = 1.2;
float beta = 30;
int rows = src.rows;
int cols = src.cols;
int channals = src.channels ();
src.convertTo(src1, CV_32F);
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
if (channals == 1) {
float s = src.at<uchar>(row, col);
dst.at<uchar>(row, col) = saturate_cast<uchar>(alpha * s + beta);
}
else {
float b = src1.at<Vec3f>(row, col)[0];
float g = src1.at<Vec3f>(row, col)[1];
float r = src1.at<Vec3f>(row, col)[2];
dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(alpha * b + beta);
dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(alpha * g + beta);
dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(alpha * b + beta);
}
}
}
imshow("yuantu", src);
imshow("new", dst);
waitKey(0);
return 0;
}
- float alpha = 0.8;
float beta = 20;