1. 程式人生 > >使用OpenCV進行影象處理-改變影象的亮度與對比度

使用OpenCV進行影象處理-改變影象的亮度與對比度

通過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,然後在終端輸入檔名作為輸出檔案的名字。