通过X11获取屏幕截图并转为opencv Mat

这篇具有很好参考价值的文章主要介绍了通过X11获取屏幕截图并转为opencv Mat。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

#include <bits/stdc++.h>
#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/opencv.hpp"
#include "opencv2/videoio.hpp"
#include <X11/Xlib.h> //-lX11
#include <X11/Xutil.h>
#include <X11/Xmd.h>
#include <X11/Xatom.h>

using namespace std;
using namespace cv;


Mat getScreenShot()
{
    Display *dis=XOpenDisplay((char *)0);
    Screen *scr = XDefaultScreenOfDisplay(dis);
    Drawable drawable = XDefaultRootWindow(dis);

    XImage *image = XGetImage(dis, drawable, 0, 0, scr->width, scr->height, AllPlanes, ZPixmap);
    int size=image->bytes_per_line*image->height;

    unsigned char imagedata[size];
    memcpy(imagedata,image->data,size);
    cv::Mat ret=cv::Mat(scr->height,scr->width,CV_8UC4,imagedata);

    XDestroyImage(image);

    XCloseDisplay(dis);
    return ret;
}文章来源地址https://www.toymoban.com/news/detail-555790.html

到了这里,关于通过X11获取屏幕截图并转为opencv Mat的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux CentOS MobaXterm 通过X11 Forwarding 在本地开启图形可视化窗口

    修改参数X11Forwarding yes和X11UseLocalhost no 我执行的时候卡住了,感觉不执行这个也可以。 x11 forwoading 变成√ xclock 本地出现这个就是可视化成功了

    2024年01月20日
    浏览(38)
  • uiautomatorViewer无法获取Android8.0手机屏幕截图的解决方案

    做APP UI自动化的时候,会碰到用uiautomatorViewer在Android 8.0及以上版本的手机上,无法获取到手机屏幕截图,无法获取元素定位信息的问题,会有以下的报 在低版本的Android手机上,则没有这个问题,可以顺利截图,但是现在手机的版本通常都不会低于Android8.0。   uiautomatorViewe

    2024年02月15日
    浏览(31)
  • 【OpenCV】 基础入门(一)初识 Mat 类 | 通过 Mat 类显示图像

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 【OpenCV • c++】计算机视觉 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪

    2024年04月16日
    浏览(23)
  • 【C/C++】使用C++和Direct3D (d3d)获取屏幕截图并根据传入分辨率进行缩放图片大小

    目录 一,函数清单 1.Direct3DCreate9 函数 2.IDirect3D9::CreateDevice 方法 3.IDirect3DDevice9::GetDisplayMode 方法 4.IDirect3DDevice9::CreateOffscreenPlainSurface 方法 5.IDirect3DDevice9::GetFrontBufferData 方法 6.IDirect3DDevice9::D3DXLoadSurfaceFromSurface 方法 7. D3DXSaveSurfaceToFile 函数 二,关键代码实现 三,最终实现

    2024年01月18日
    浏览(36)
  • [unity]如何通过代码获取UI宽高和屏幕宽高

    1.获取UI宽高 首先,使用GetComponentRectTransform().sizeDelta获取,但是这样会有问题,会跟锚点设置有关,改变设置后获取不对 只适用于MiddleCenter 所以又看了API,可以使用GetComponentRectTransform().rect获取 打印如下:  2.获取屏幕宽高 宽度: UnityEngine.Screen.width 高度: UnityEngine.Screen.

    2024年02月17日
    浏览(32)
  • 0x11 栈

    栈是一种“先进后出”的线性数据结构。栈只有一端能够进出元素,我们一般称这一端为栈顶,另一端为栈底。添加或删除栈中元素时,我们只能将其插入到栈顶(进栈),或者把栈顶元素从栈顶取出(出栈)。 实现一个栈,支持查找栈中最小值的操作,要求时间复杂度为

    2024年02月04日
    浏览(27)
  • C#截图操作屏幕不完整/多屏幕共同截图解决

    使用C#如下代码进行截图 会发现截取出的图片左上角(Top、Left)是正确的,但是右下角(Size)却比屏幕小 图1为截图结果(1707*960),图2为完整屏幕(2560*1440) 对比不难发现,图1的长和高只有图2的1/1.5,也就是截图出来的大小,是经过window缩放的。 即代码:Screen.AllScreens

    2024年02月12日
    浏览(33)
  • uds的0x11服务介绍

    UDS(Unified Diagnostic Services)是一种汽车电子系统的诊断协议,目标是提供具有通用性、标准化和可互换性的诊断接口。在UDS中,0x11服务主要用于对ECU的存储器进行读取和写入操作,其具体介绍如下: 0x11服务被称为“安全访问(Request Upload / Request Download)”,是UDS协议的两项

    2023年04月09日
    浏览(28)
  • mac X11 XQuartz的安装与使用

    本地系统:MacOS 12.4 远程主机系统:Ubuntu 18.04 命令说明 ssh命令 ssh 命令大家很熟悉了,这里仅介绍与 X11 forwarding 相关的几个选项。 本部分译自 ssh 命令手册,可见 man ssh -X :打开 X11 forwarding。也可以通过在 configuration 文件中对每个 host 单独进行设置。 应谨慎启用 X11 forwardi

    2024年02月04日
    浏览(32)
  • Ubuntu X11VNC 远程桌面安装与使用

    通过下载安装VNC实现,远程操控Linux系统,详细安装步骤如下: 1.控制端 需下载VNC Viewer,官网地址为:Download VNC Viewer | VNC® Connect 1.1Windows选择如下: 下载完成后双击安装。 之后全部默认选择下一步,完成安装。 点击搜索栏,输入vnc ,打开vnc viewer 选择不登录进入 此时等待

    2024年02月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包