opencv + Qt 窗口绑定

之前写了halcon与Qt的窗口绑定,最近在用opencv做图像,就写了这个

本篇文章是用的VS写的,其中用到了QT和opencv

目录

一:准备

二:绑定操作

三:图像显示

      1.不用按钮直接显示

      2.使用按钮显示

四:效果展示


一:准备

1:qt与opencv得配好(单独用qt可以省略这一步)

2:导入opencv的库

3:包含头文件

//下面这两个头文件是需要额外加的,一般不绑定窗口是不需要这一步的

#include       //opencv4.0以后需要引用
#include   //winAPI,需要使用它来获取opencv窗口句柄

//注意:
//利用窗口句柄绑定窗口, 引用WIN API,所有头文件中不能使用cv命名空间,
//因为winApi也有一个cv命名空间,会冲突。头文件里可以用cv::Mat的方式避免使用cv命名空间
//单独用Qt需要加这个,用VS不需要加
QT   += winextras    //需要使用winAPI来获取opencv窗口句柄

二:绑定操作

 .h文件:

private slots:
    void on_pushButton_clicked();  //添加一个按钮
public:
    std::string winName;           //定义一个全局变量,这样的好处是这
                                   //个在其他函数里面也可以用这个窗口

 .cpp文件

winName = "SS";
cv::namedWindow(winName, cv::WINDOW_AUTOSIZE);

//再Qt控件上显示cv::nameWindow窗口
HWND hwnd = (HWND)cvGetWindowHandle(winName.c_str());   //#include 
HWND paraent = GetParent(hwnd);                         //得到nameWindow窗口的父句柄
SetParent(hwnd, (HWND)ui.graphicsView->winId());        //设置ui控件的句柄是父句柄
ShowWindow(paraent, SW_HIDE);                           //隐藏掉nameWindow窗口
resizeWindow(winName, cv::Size(ui.graphicsView->width(), ui.graphicsView->height()));

三:图像显示

1.不用按钮直接显示

直接在前面的.cpp文件下面加入下面代码

cv::Mat img = cv::imread("E:/app/vsopencv/data/equalLena.png", cv::IMREAD_ANYCOLOR);
cv::imshow(winName, img);

2.使用按钮显示

在.cpp文件中加入下面函数

void QtGuiApplication1::on_pushButton_clicked()
{
	cv::Mat img = cv::imread("E:/app/vsopencv/书资料/data/lena.png", cv::IMREAD_ANYCOLOR);
	cv::imshow(winName, img);
}

需要注意的是,这里winName是全局变量,如果不是,是没法在按钮中进行显示的,这个操作会使得后面的图像处理方便很多

四:效果展示

opencv + Qt 窗口绑定_第1张图片

你可能感兴趣的:(opencv,图像处理,qt,计算机视觉,c++,opencv)