OpenCV使用QT GUI显示

OpenCV使用QT GUI显示

效果

首先看结果:可以图片进行放大,缩小,还可以得到任意像素坐标和像素RGB而不需要任何额外的代码。
这里写图片描述
这里写图片描述


简要说明

想拥有这样的效果需要两个条件:

  • 编译opencv时勾选USE_QT(确保GUI使用QT)
  • 写程序时包含QT库

详细说明

opencv进行显示必须依赖一种可视化库,可以是VTK或GTK或QT。
我们最常见的是前两种,我们最常见的是这种:
这里写图片描述
但这种显示处理显示,并没有其他功能,如放大,缩小,取像素值等功能
今天我们要使用更为强大的功能较多的GUI-QTGUI配合我们更好的显示:

首先想要使用QTGUI,在opencv编译的时候要勾选“USE_QT”,当CMAKE在configure中显示:QT YES
这里写图片描述
说明我们使用了QT作为我们的GUI了。
其次,我们使用了QTGUI,那我们在写程序的时候一定要链接QT的库,不然程序不能进行显示。

实例1

最简单的opencv程序
cpp

#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;

void main()
{
    cout << CV_VERSION << endl;
    Mat src = imread("../data/1.jpg");
    imshow("img", src);
    waitKey(0);//暂停按键等待
}

CMakeList:

cmake_minimum_required(VERSION 2.8.12)

project(cuda_sift)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

#find qt5
find_package(Qt5Core)

#find OpenCV
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})



add_executable(${PROJECT_NAME} "main.cpp")

target_link_libraries(${PROJECT_NAME} Qt5::Core)
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

实例2

下面是个示例:此例可以扩展窗口,注释掉的部分可以写按钮,加控制条,鼠标等事件。方便实验。

CPP:

#include <iostream>
#include <opencv2/highgui.hpp>

void callbackButton(int,void*)
{
    std::cout<<"asd"<<std::endl;
}
void callbackButton1(int,void*)
{
    std::cout<<"asd"<<std::endl;
}
void callbackButton2(int,void*)
{
    std::cout<<"asd"<<std::endl;
}
void on_mouse(int a,int b ,int c,int d,void*)
{
    //std::cout<<"asd"<<std::endl;
}

int main(int argc, char *argv[])
{
//    int value = 50;
//    int value2 = 0;

    cvNamedWindow("main1",CV_WINDOW_NORMAL);
//    cvNamedWindow("main2",CV_WINDOW_AUTOSIZE | CV_GUI_NORMAL);

//    cvCreateTrackbar( "track1", "main1", &value, 255,  NULL);//OK tested
//    char* nameb1 = "button1";
//    char* nameb2 = "button2";
//    cvCreateButton(nameb1,callbackButton,nameb1,CV_CHECKBOX,1);

//    cvCreateButton(nameb2,callbackButton,nameb2,CV_CHECKBOX,0);
//    cvCreateTrackbar( "track2", NULL, &value2, 255, NULL);
//    cvCreateButton("button5",callbackButton1,NULL,CV_RADIOBOX,0);
//    cvCreateButton("button6",callbackButton2,NULL,CV_RADIOBOX,1);

//    cvSetMouseCallback( "main2",on_mouse,NULL );

    cv::Mat img1 = cv::imread("../data/lena.png");
    cv::Mat img2(img1);

    //`Esc` drop out
    while(cvWaitKey(33) != 27)
    {
        cv::imshow("main1",img2);
    }

    cvDestroyAllWindows();
    img1.release();
    img2.release();

    return 0;
}

CMakeList:

cmake_minimum_required(VERSION 2.8.12)

project(cuda_sift)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

#find qt5
find_package(Qt5Core)

#find OpenCV
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})



add_executable(${PROJECT_NAME} "main.cpp")

target_link_libraries(${PROJECT_NAME} Qt5::Core)
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

猜你喜欢

转载自blog.csdn.net/fb_help/article/details/79696350