圖像處理算子是帶有一幅或多幅輸入圖像、產生一幅輸出圖像的函數。
圖像變換可分為以下兩種:點算子(像素變換)鄰域算子
圖像增強和亮度調整屬於像素變換范疇常見變換方法是:
其中 i 和 j屬於行和列
#define WIN_NAME "輸出圖像" Mat srcImage; Mat dstImage; int contrast = 20, bright = 20; void onChange(int, void*) { for (int i = 0; i < srcImage.rows; i++) { for (int j = 0; j < srcImage.cols; j++) { //也可以用for循環 dstImage.at<Vec3b>(i, j)[0] = saturate_cast<uchar>(srcImage.at<Vec3b>(i, j)[0] * contrast*0.01 + bright); dstImage.at<Vec3b>(i, j)[1] = saturate_cast<uchar>(srcImage.at<Vec3b>(i, j)[1] * contrast*0.01 + bright); dstImage.at<Vec3b>(i, j)[2] = saturate_cast<uchar>(srcImage.at<Vec3b>(i, j)[2] * contrast*0.01 + bright); } } // srcImage.convertTo(dstImage, -1, 0.01, 20); imshow("原圖", srcImage); imshow(WIN_NAME, dstImage); } void main() { srcImage = imread("E:\\欣奕華\\項目\\OPENCV\\ContrastBright\\ConBrightness\\1.jpg", 1); dstImage.create(srcImage.size(), srcImage.type()); namedWindow(WIN_NAME, WINDOW_AUTOSIZE); createTrackbar("對比度", WIN_NAME, &contrast, 200, onChange, 0); createTrackbar("亮 度", WIN_NAME, &bright, 200, onChange, 0); onChange(contrast, 0);//回調函數初始化 onChange(bright, 0); waitKey(); }