opencv 显示无边框

opencv里自带一个HIGHGUI 函数 imshow 可以显示图像

 

函数格式:

void imshow(const string& winname, InputArray mat);

参数说明:

第一个参数:const string&类型的winname,指需要显示的窗口标识名称。

第二个参数:InputArray类型的mat,指需要显示的图像。

 

正常测试读取图片:

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

using namespace cv;

int main()
{
   namedWindow("Test",CV_WINDOW_AUTOSIZE);
   Mat Frame = imread("2.jpg");
   imshow("Test",Frame);
   waitKey(0);
   return 0;
}


上面都是带了标题栏。

 

不带标题栏,并且指定显示位置的方法:

1.创建窗口,并且移动窗口到指定位置

  • WINDOW_AUTOSIZE 窗口大小自动适应图片大小,并且不可手动更改。
	namedWindow("WINDOW", CV_WINDOW_AUTOSIZE);
	moveWindow("WINDOW", 500, 500);  //窗口左上角在坐标(500,500)的位置上

2.设置窗口参数

  • CV_WINDOW_NORMAL          = 0x000000000   // 将窗口更改为正常大小或使窗口可调整大小
  • CV_WINDOW_AUTOSIZE        =  0x00000001   // 通过显示的图像约束大,窗口不能调整大小
  • CV_WINDOW_FULLSCREEN  =  1                     // 将窗口更改为全屏
  • CV_WINDOW_FREERATIO      =  0x00000100   // 图像尽可能地扩展(没有比例约束)
  • CV_WINDOW_KEEPRATIO      =  0x00000000    // 使窗口可调整大小,但保留显示图像的比例
setWindowProperty("WINDOW", CV_WINDOW_FULLSCREEN, CV_WINDOW_FULLSCREEN);

3.创建窗口句柄

FindWindow:

  • 函数获得一个顶层窗体的句柄,该窗体的类名和窗体名与给定的字符串相匹配。
  • 该函数不查找子窗体。在查找时不区分大写和小写。
  •  成功返回句柄,失败返回0。

字符串前加L:

  • unicode字符集是两个字节组成的。
  • L告示编译器使用两个字节的 unicode 字符集。
  • 如  L"WINDOW"    表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。

衍生字符串前加_T :

  • _T宏可以把一个引号引起来的字符串。
  • 根据你的环境设置,使得编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式。
  • 如果你定义了UNICODE,那么_T宏会把字符串前面加一个L。这时 _T("WINDOW") 相当于 L"WINDOW" ,这是宽字符串。 
  • 如果没有定义,那么_T宏不会在字符串前面加那个L,_T("WINDOW") 就等价于 "WINDOW"
HWND win_handle = FindWindow(0, L"input");
if (!win_handle)
{
	printf("Failed FindWindow\n");
	return -1;
}

4.设置

BOOLSetWindowPos( HWND hWnd,    HWND hWndInsertAfter,     int X,    int Y,    int cx,     int cy,    UINT uFlags);

  • 该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸,位置和Z序。
  • 窗口弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高。
  • 并且被设置为Z序的第一个窗口。
  • hWnd: 窗口句柄。
  • hWndInsertAfter :   窗口的 Z 顺序。
  • X, Y  :以客户坐标指定窗口新位置的左边界和顶边界。
  • cx, cy:以像素指定窗口的新的宽度和新的高度。
  • uFlags :窗口尺寸和定位的标志。

UINT uFlags 的参数可以是下列的组合:

  • SWP_ASNCWINDOWPOS: 如果调用进程不拥有窗口,系统会向拥有窗口的线程发出消息。这就防止调用线程在其他线程处理需要的时候发生死锁。
  • SWP_DEFERERASE:防止产生WM_SYNCPAINT消息。
  • SWP_DRAWFRAME:在窗口周围画一个边框(定义在窗口类描述中)。
  • SWP_FRAMECHANGED:给窗口发送WM_NCCALCSIZE消息,即使窗口尺寸没有改变也会发送该消息。如果未指定这个标志,只有在改变了窗口尺寸时才发送WM_NCCALCSIZE。
  • SWP_HIDEWINDOW;隐藏窗口。
  • SWP_NOACTIVATE:不激活窗口。如果未设置标志,则窗口被激活,并被设置到其他最高级窗口或非最高级组的顶部(根据参数hWndlnsertAfter设置)。
  • SWP_NOCOPYBITS:清除客户区的所有内容。如果未设置该标志,客户区的有效内容被保存并且在窗口尺寸更新和重定位后拷贝回客户区。
  • SWP_NOMOVE:维持当前位置(忽略X和Y参数)。
  • SWP_NOOWNERZORDER:不改变z序中的所有者窗口的位置。
  • SWP_NOREDRAW: 不重画改变的内容。如果设置了这个标志,则不发生任何重画动作。适用于客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动而露出的父窗口的所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口的任何部分和父窗口需要重画的部分。
  • SWP_NOREPOSITION;与SWP_NOOWNERZORDER标志相同。
  • SWP_NOSENDCHANGING:防止窗口接收WM_WINDOWPOSCHANGING消息。
  • SWP_NOSIZE:维持当前尺寸(忽略cx和Cy参数)。
  • SWP_NOZORDER:维持当前Z序(忽略hWndlnsertAfter参数)。
  • SWP_SHOWWINDOW:显示窗口。
unsigned int flags = (SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER);
flags &= ~SWP_NOSIZE;
unsigned int x = 0;
unsigned int y = 0;
unsigned int w = 1136;
unsigned int h = 639;
SetWindowPos(win_handle, HWND_NOTOPMOST, x, y, w, h, flags);

5.无边框设置

SetWindowLong(win_handle, GWL_STYLE, GetWindowLong(win_handle, GWL_EXSTYLE) | WS_EX_TOPMOST);
ShowWindow(win_handle, SW_SHOW);

后面就是直接读取图片或者视频在这个窗口里播放就可以了 ,效果如下,根据经验最好是循环读取或者播放。

 

以上均为学习笔记。

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
基于OpenCV显示热成像的方法有多种。首先,我们需要获取热成像图像数据。可以使用热像仪等设备采集实际的热成像数据,也可以利用热成像传感器模拟生成虚拟的热成像数据。 接下来,我们需要对热成像数据进行处理和解析。首先,根据热成像数据的格式(如色阶、数据范围等),进行数据归一化和转换,将数据转化为OpenCV可识别的格式。然后,可以使用OpenCV提供的函数和算法进行图像处理,例如滤波、增强等。可以根据需求,选择不同的算法进行图像处理,以得到更清晰和易读的热成像图像。 在得到处理后的热成像图像后,我们可以通过OpenCV提供的函数来显示图像。首先,创建一个窗口或图像显示区域,然后通过OpenCV提供的函数将处理后的热成像图像显示在窗口中。通过调整窗口的相关参数,可以实现对图像的放大、缩小、移动等操作。 为了提高热成像图像的可视化效果,我们还可以添加一些图像的标注和注释。例如,可以添加图例来显示不同色阶对应的温度范围,方便观察者理解图像的含义;还可以使用文本注释或标记点来指示特定的温度区域或热点位置。 总之,基于OpenCV显示热成像需要获取热成像数据、进行数据处理和解析,并利用OpenCV函数进行图像处理和显示。通过调整窗口参数和添加标注注释,可以得到清晰、易读的热成像图像。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值