opencv绑定QT控件的详细介绍如下:
1 利用opencv自带函数namedWindow创建显示窗口,这里显示模式设置为WINDOW_NORMAL
2 获取opencv自带窗口的窗口句柄(这里使用win32的API获取到窗口句柄, 需要引包,项目文件.pro里也需要引用)
3 然后将QT控件设置为父对象进行绑定(这里以QLabel为例)
4 将opencv窗口尺寸设置与QLabel尺寸一样保证图片显示完全。
一 项目文件内引用
QT += winextras //需要使用winAPI来获取opencv窗口句柄
二 头文件引用
#include<QtWinExtras/QtWinExtras> //winAPI,需要使用它来获取opencv窗口句柄
#include<highgui/highgui_c.h> //opencv4.0以后需要引用
三 主代码
//利用窗口句柄绑定窗口,引用WIN API,所有头文件中不能使用cv命名空间,因为winApi也有一个cv命名空间,会冲突
namedWindow("src1",WINDOW_NORMAL);//创建窗口
HWND hwnd1=(HWND)cvGetWindowHandle("src1");//opencv4.0以后需要引入highgui_c包,QT需要引#include<QtWinExtras/QtWinExtras>包
HWND hparent=GetParent(hwnd1);//获取父窗口
SetParent(hwnd1,(HWND)this->ui->testLabel->winId());//设置父窗口
ShowWindow(hparent,SW_HIDE);//显示窗口,之前的设置为隐藏
resizeWindow("src1",Size(670,560));//将尺寸设置与QLabel一致
这样窗口就不会跑来跑去了,需要注意的是利用窗口句柄绑定窗口,引用WIN API,所有头文件中不能使用cv命名空间,因为winApi也有一个cv命名空间,会冲突。头文件里可以用cv::Mat的方式避免使用cv命名空间~