了解X window以及相关知识

1X window简介

X Window(也常称为X11或X)系统是一种以位图方式显示的软件视窗系统,最初是1984年麻省理工学院的研究,之后变成UNIX、类UNIX、以及OpenVMS等操作系统所移植适用的标准化软件工具包及显示架构的运作协议。

X的实质是工具包及架构规范,即是一个协议,X协议主要有X应用程序(客户端)和X服务器组成,而XFree86(Linux现在使用的是Xorg)是实现X协议的一个X服务器软件,他能按照X协议的规定来完成X应用程序提交的在屏幕上显示的任务。一般情况下,X协议的服务器和客户端都在同一台电脑上,X应用程序向本机的X服务器发出操作请求,然后X服务器将结果输出到本机显示器中,实现图像显示,因此我们感受不到。

2X协议的客户端实现--Xlib

XFree86、Xorg是X协议的服务器软件,但客户端更多的是让程序员更方便的使用X协议使其能和服务端进行交互,因此就产生了一个Xlib库,这个库封装了X协议的内容,通俗地说,现在说的Xwindow编程就是利用Xlib进行客户端开发,但使用Xlib库非常不方便,于是就有开发者对Xlib进一步封装,产生了QT和GTK。QT直接使用Xlib库,GTK使用GDK和GliB函数库,这两个函数库也是使用Xlib的。

3、桌面环境

窗口管理器的作用是实现窗口的最小最大化、移动和关闭等操作,X服务器并不能操作窗口,要实现这个功能它必须借助窗口管理器,因此X服务器自带一个简单的窗口管理器(Xfree86的twm)。KDE和GNOME也是窗口管理器,在QT基础上实现的窗口管理器叫KDE,在GTK上实现的叫GNOME。启动他们后就进入了我们熟悉的可视化操作图形界面,但他们功能并不只有窗口管理,还有提供菜单桌面等很多实用程序和应用程序,因此我们又称KDE和GNOM为桌面环境(还有XFCE、LXDE等)。同一个linux有不同版本的桌面,比如ubuntu是GNOME桌面(从ubuntu11.04后就变成了UNITY),Kubuntu是KDE,Lubuntu是Lxde。

4、Display环境变量

在Linux/Unix类操作系统上,DISPLAY用来设置将图形显示到何处,DISPLAY环境变量的格式如下:host:NumA.NumB,host指X服务器所在的主机名或者ip地址,图形将显示在这一机器上,假如host为空(即DISPLAY=:0.0),则表示X服务器运行于本机中。要想连接别的机器的X服务器,必须设置DISPLAY环境变量。

参考资料:

X Window:

https://www.cnblogs.com/youxia/p/linux003.html

https://www.jb51.net/LINUXjishu/512251.html

Xlib:

https://tronche.com/gui/x/xlib-tutorial/

https://www.x.org/releases/X11R7.6/doc/libX11/specs/libX11/libX11.html

https://blog.csdn.net/dbzhang800/article/details/6428207

https://blog.csdn.net/xqhrs232/article/details/78450316

DISPLAY环境变量:

http://blog.chinaunix.net/uid-23072872-id-3388906.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# 导入所需的库 import cv2 import time import numpy as np # 加载OpenPose模型 net = cv2.dnn.readNetFromTensorflow("C:\Users\1\Desktop\onem.jpg") # 配置OpenCV窗口 cv2.namedWindow("OpenPose Demo", cv2.WINDOW_NORMAL) # 加载要测试的图像 image = cv2.imread("C:\Users\1\Desktop\onem.jpg") # 获取图像的宽和高 width = image.shape[1] height = image.shape[0] # 创建一个4D blob,将图像传递给OpenPose模型 blob = cv2.dnn.blobFromImage(image, 1.0 / 255, (368, 368), (0, 0, 0), swapRB=False, crop=False) # 设置输入blob net.setInput(blob) # 运行前向传递,获取OpenPose模型的输出 start = time.time() output = net.forward() end = time.time() # 输出运行时间 print("OpenPose took {:.2f} seconds".format(end - start)) # 获取输出blob的大小 H = output.shape[2] W = output.shape[3] # 创建一个空列表,用于存储检测到的人体姿态 points = [] # 遍历检测到的人体关键点 for i in range(18): # 提取x和y坐标 probMap = output[0, i, :, :] minVal, prob, minLoc, point = cv2.minMaxLoc(probMap) # 如果概率大于阈值,则将其添加到列表中 if prob > 0.1: x = int((width * point[0]) / W) y = int((height * point[1]) / H) points.append((x, y)) # 绘制检测到的人体姿态 for i, point in enumerate(points): cv2.circle(image, point, 5, (0, 255, 255), thickness=-1, lineType=cv2.FILLED) cv2.putText(image, "{}".format(i), point, cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2, lineType=cv2.LINE_AA) # 显示结果 cv2.imshow("OpenPose Demo", image) cv2.waitKey(0) cv2.destroyAllWindows()
06-07

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值