簡單的opencv GUI庫

對圖像進行處理時通常需要調整函數的參數,特別是像邊緣檢測或者是圖像亮度調節等操作,常常需要經過多次調節才能得到滿意的結果。而每次要重新設置參數都需要重新更改程序中的代碼,opencv也有自帶的gui,不過一直覺得很不好用,今天發現了一個非常簡單的gui庫:cvui,只需要包含一個頭文件,並且是跨平臺的,不需要附屬其他文件,非常方便。
下載地址:cvui
界面先睹爲快:
這裏寫圖片描述

下面以canny邊緣檢測爲例,動態調節高低閾值的大小,主要包括一個checkbox和兩個trackbar,代碼非常簡潔,很適合簡單的應用。
直接貼代碼:

#include <opencv2/opencv.hpp>
#include "cvui.h"

#define WINDOW_NAME "CVUI"

using namespace cv;
using namespace std;

int main()
{
    Mat src = imread("lena.jpg");
    Mat frame = src.clone();

    int low_threshold = 50, hight_threshold = 100;
    bool use_canny = false;

    // Init a OpenCV window and tell cvui to use it.
    namedWindow(WINDOW_NAME);
    cvui::init(WINDOW_NAME);

    while (true)
    {
        if (use_canny)
        {
            cvtColor(src, frame, CV_BGR2GRAY);
            Canny(frame, frame, low_threshold, hight_threshold, 3);
        }
        else
        {
            src.copyTo(frame);
        }

        // Render the settings window to house the UI
        cvui::window(frame, 10, 50, 180, 180, "Settings");

        // Checkbox to enable/disable the use of Canny edge
        cvui::checkbox(frame, 15, 80, "use canny edge", &use_canny);

        // Two trackbars to control the low and high 
        // threshold values for the Canny edge algorithm.
        cvui::trackbar(frame, 15, 110, 165, &low_threshold, 5, 150);
        cvui::trackbar(frame, 15, 180, 165, &hight_threshold, 80, 300);

        // Update cvui internal stuff
        cvui::update();
        imshow(WINDOW_NAME, frame);

        if (waitKey(30) == 27)
        {
            break;
        }
    }
    return 0;
}

需要注意兩點:
1.使用cvui需要在顯示任何控件之前調用cvui::init();
2.在所有控件都顯示後需要調用cvui::update();

這裏寫圖片描述

just enjoy the cvui!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章