撰寫一個程式從檔案讀取一張圖像,將圖像的每一個點像素的值各加上一個整數值 v (-255 <= v <= 255),並將圖像儲存至一個新圖像檔案中。
二、環境:
MS Window 10
Visual Studio 2017
OpenCV 3.4.1
三、說明:
1. 載入影像Mat img = imread("color_pic.png", CV_LOAD_IMAGE_COLOR);
2. 建立視窗
namedWindow("Homework 1", 1);
3. 4個滑桿分別調整 "亮度" 和 "對比度",移動滑桿呼叫on_trackbar()
createTrackbar("亮度(+)", "Homework 1", &brightness_p, bp_maxValue, on_trackbar);
on_trackbar(brightness_p, 0);
4. on_trackbar()
(1) 使用ptr處理每個像素
const uchar *imgPtr = img.ptr<const uchar>(iH);
uchar *dstPtr = dst.ptr<uchar>(iH);
(2) y = a * x + b,對比度為 a 和 b 調整,亮度為 b 調整 & (3) saturate_cast<uchar>處理溢位問題
dstPtr[iW] = saturate_cast<uchar>(contrast*imgPtr[iW] + brightness + (1 - contrast) * 125);
(4) 呈現影像
imshow("Homework 1", dst);
5. 建立滑鼠事件
setMouseCallback("Homework 1", onMouse, NULL);
6. 偵測左鍵雙擊,儲存影像
if (Event == CV_EVENT_LBUTTONDBLCLK)
imwrite("output.png", dst);
四、實作:
原圖 |
亮度增加 (+87) 亮度降低 (-87)
對比度增加 (x2.0) 對比度降低 (x0.5)
亮度增加 (+87) + 對比度增加 (x2.0) 亮度降低 (-87) + 對比度增加 (x2.0)
亮度增加 (+87) + 對比度降低 (x2.0) 亮度降低 (-87) + 對比度降低 (x2.0)
沒有留言:
張貼留言