opencv4.2.0 将Mat 对象通过窗口句柄 显示到Qt label

将opencv的Mat对象显示到Qt label有两种方法:
1.通过把opencv的 Mat对象转为Qt 的 pixelmap,这种方法费时,不推荐。网上有很多实现方法。
2.通过转换窗口的 父 句柄,把 cv::namedWindow(title,cv::WINDOW_GUI_NORMAL);
的父句柄改为Qt控件label的句柄。
见代码及注释

#include <Windows.h>
#include "opencv2/highgui/highgui.hpp"
#include <opencv2/highgui/highgui_c.h>
//opencv4以后需 添加<opencv2/highgui/highgui_c.h>才有cvGetWindowHandle
QtGuiApplication3::QtGuiApplication3(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	std:: string title = "采集保存";
	cv::namedWindow(title,cv::WINDOW_GUI_NORMAL);
	HWND hWnd = (HWND)cvGetWindowHandle(title.c_str());//获得名为 title 窗口的句柄。
	HWND hParent = GetParent(hWnd);//获得名为 title 窗口的父句柄。
	SetParent(hWnd, (HWND)ui.label_10->winId());//把label的句柄设为 hWnd 的父句柄。(HWND)ui.label_10->winId()获取label的句柄。
	ShowWindow(hParent, SW_HIDE);//显示hParent句柄代表的窗口,第二个参数设为SW_HIDE,隐藏之前的窗口。
	cv::resizeWindow("采集保存", cv::Size(800, 800));//重置窗口大小,以适应label的大小。
}
void QtGuiApplication3::on_pushButton_5_clicked() {
//省略Buffer2_img_src的定义,可以是Mat可接收的任意尺寸、类型图片。
.
.
.
	cv::imshow(title, Buffer2_img_src);
}

这样每一张图片都可以显示到Qt的label中,把label的大小设为800*800即可。
喜欢记得点个赞噢!
QVQ

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值