使用OpenCV進行影象處理-改變影象的亮度與對比度
阿新 • • 發佈:2018-12-11
通過OpenCV,製作一個有關影象處理的在Linux下的軟體。
製作可以自動處理影象亮度的簡單軟體。
開發環境:CodeBlocks
#include <iostream> #include <string> #include <opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> using namespace cv; using namespace std; static void ContrastAndBright(int, void*); int g_BrightValue = 37; Mat g_srcImage, g_dstImage; int main(int argc, char *argv[]) { string filename; cout << "Please input file name:"; cin >> filename; cout <<"Enter 'q' to finish the handle." << endl; g_srcImage = imread(filename); g_dstImage = Mat::zeros(g_srcImage.size(), g_srcImage.type()); namedWindow("【效果圖視窗】"); // createTrackbar("對比度:", "【效果圖視窗】", &g_ContrastValue, 300, ContrastAndBright); // createTrackbar("亮 度:", "【效果圖視窗】", &g_BrightValue, 200, ContrastAndBright); ContrastAndBright(g_BrightValue, 0); while(char(waitKey(1)) != 'q') {} cout << "Please input finished file name:"; cin >> filename; imwrite(filename, g_dstImage); return 0; } static void ContrastAndBright(int, void*) { namedWindow("【原始圖視窗】"); for(int y = 0; y < g_srcImage.rows; ++y) for(int x = 0; x < g_srcImage.cols; ++x) for(int c = 0; c < 3; ++c) g_dstImage.at<Vec3b>(y,x)[c] = saturate_cast<uchar>( g_srcImage.at<Vec3b>(y,x)[c] + g_BrightValue); imshow("【原始圖視窗】", g_srcImage); imshow("【效果圖視窗】", g_dstImage); }
程式首先定義了一個兩張mat,分別表示原始圖與效果圖,然後定義了原始圖視窗。然後讀取原始圖片的名字。然後呼叫了改變圖片亮度的函式,在函式中,首先輸出原始圖視窗,然後提取原始圖的每一個畫素,對於每個畫素做出對應的亮度處理,然後將其賦值給效果圖,然後輸出效果圖視窗。最後按下q鍵退出處理,並且在終端輸入輸出檔案的名字,就可以將檔案輸出了。
2.尋找一張亮度較暗的圖片作為源圖片。開啟終端。編譯並執行程式。輸入圖片的路徑和名字。然後按下回車鍵。
可以看到圖片的亮度明顯變亮。這樣就可以按下q,然後在終端輸入檔名作為輸出檔案的名字。