簡單的opencv GUI庫
阿新 • • 發佈:2019-01-24
對影象進行處理時通常需要調整函式的引數,特別是像邊緣檢測或者是影象亮度調節等操作,常常需要經過多次調節才能得到滿意的結果。而每次要重新設定引數都需要重新更改程式中的程式碼,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!