TIOVX:opencv的Mat类图像零拷贝转为openvx的vx_image格式,通过Not节点无效果问题记录
问题描述
代码中,创建了一个opencv的Mat图像(并打印了所有的像素值),然后通过vxCreateImageFromHandle函数将Mat图像转为了vx_image图像(通过映射的方式打印了所有的像素值,通过日志可以看出与之前打印相同)。然后创建graph,将其作为vxNotNode的输入,运行图之后,将vxNotNode节点的输出图像进行映射打印。按理说,打印的像素值应该是输入图像的取反图像(即输出像素值=255-输入像素值),然而事实并非如此,该问题应该如何解决?
代码
void show_image_all_pixel(vx_image in_img)
{vx_uint32 width;vx_uint32 height;vxQueryImage(in_img, (vx_enum)VX_IMAGE_WIDTH, &width, sizeof(vx_uint32));vxQueryImage(in_img, (vx_enum)VX_IMAGE_HEIGHT, &height, sizeof(vx_uint32));vx_map_id map_id_in;vx_rectangle_t rect_in = {0, 0, width, height};vx_imagepatch_addressing_t map_addr_in;vx_uint8* map_ptr_in;vxMapImagePatch(in_img, &rect_in, 0, &map_id_in, &map_addr_in, (void **)&map_ptr_in, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X);printf("/************************************打印图像像素值************************************/\n");volatile vx_uint32 i,j,k;i=j=k=0;for(volatile vx_uint32 y = 0; y < map_addr_in.dim_y; y+=map_addr_in.step_y){j = (map_addr_in.stride_y*y*map_addr_in.scale_y)/VX_SCALE_UNITY;for (volatile vx_uint32 x = 0; x < map_addr_in.dim_x; x+=map_addr_in.step_x){i = j + (map_addr_in.stride_x*x*map_addr_in.scale_x)/VX_SCALE_UNITY;k++;if (0 == k%width){printf("%u\n", *(map_ptr_in+i));}else{printf("%u, ", *(map_ptr_in+i));}}}printf("/************************************打印图像像素值结束************************************/\n");vxUnmapImagePatch(in_img, map_id_in);
}void main(void)
{vx_uint32 width = 16;vx_uint32 height = 5;// 创建opencv图像Mat img(height,width,CV_8UC1,Scalar(0));img(Range(1,5), Range(1,5)) = Scalar(255);printf("opencv创建图像(高*宽*通道数):%d*%d*%d\n", img.rows, img.cols, img.channels());cout << "img.elemSize(): " << img.elemSize() << endl;cout << "img.elemSize1(): " << img.elemSize1() << endl;cout << "img.step: " << img.step << endl;cout << "img.step1(): " << img.step1() << endl;imwrite("pics/inImg_cvSave.bmp", img);// 打印opencv创建的图像的所有像素cout << "---------------------------------打印opencv创建的图像的所有像素---------------------------------" << endl;int tt=0;for (int i=0; i<(int)height; i++){for(int j=0; j<(int)width; j++){tt++;if (0 == tt%width){cout << img.at<uchar>(i,j) << endl;}else{cout << (int)img.at<uchar>(i,j) << ", ";}}}// 利用opencv图像信息配置openvx图像地址结构vx_imagepatch_addressing_t addr;addr.dim_x = width;addr.dim_y = height;addr.stride_x = (vx_uint32)img.elemSize();addr.stride_y = (vx_uint32)img.step;addr.step_x = 1;addr.step_y = 1;addr.scale_x = VX_SCALE_UNITY;addr.scale_y = VX_SCALE_UNITY;void* ptr = img.data;// 创建上下文,输入图像vx_context context = vxCreateContext();ERROR_CHECK_OBJECT(context);vx_image in_img;vx_status status = VX_SUCCESS;// 从句柄中导入输入图像,打印图像属性,openvx图像地址结构in_img = vxCreateImageFromHandle(context, VX_DF_IMAGE_U8, &addr, &ptr, VX_MEMORY_TYPE_HOST);cout << "---------------------------------打印vxCreateImageFromHandle创建的图像的所有像素---------------------------------" << endl;show_image_all_pixel(in_img);// 创建图,创建输出图像vx_graph graph = vxCreateGraph(context);vx_image out_img = vxCreateImage(context, width, height, VX_DF_IMAGE_U8);// 创建节点vx_node n0 = vxNotNode(graph, in_img, out_img);// 验证图,保存图结构status = vxVerifyGraph(graph);// 调度图status = vxScheduleGraph(graph);status = vxWaitGraph(graph);if (VX_SUCCESS == status){cout << "---------------------------------打印vxNotNode输出图像的所有像素---------------------------------" << endl;show_image_all_pixel(out_img);}// 释放资源vxReleaseImage(&in_img);vxReleaseImage(&out_img);vxReleaseNode(&n0);vxReleaseGraph(&graph);vxReleaseContext(&context);
}
日志
APP: Init ... !!!
MEM: Init ... !!!
MEM: Initialized DMA HEAP (fd=4) !!!
MEM: Init ... Done !!!
IPC: Init ... !!!
IPC: Init ... Done !!!
REMOTE_SERVICE: Init ... !!!
REMOTE_SERVICE: Init ... Done !!!30433.712534 s: GTC Frequency = 200 MHz
APP: Init ... Done !!!30433.712892 s: VX_ZONE_INIT:Enabled30433.712904 s: VX_ZONE_ERROR:Enabled30433.712948 s: VX_ZONE_WARNING:Enabled30433.713889 s: VX_ZONE_INIT:[tivxInitLocal:130] Initialization Done !!!30433.715078 s: VX_ZONE_INIT:[tivxHostInitLocal:93] Initialization Done for HOST !!!
/************************************打印Target使能情况************************************/
TIVX_TARGET_A72_0 Enable: YES
TIVX_TARGET_A72_1 Enable: YES
TIVX_TARGET_A72_2 Enable: YES
TIVX_TARGET_A72_3 Enable: YES
TIVX_TARGET_DSP1 Enable: YES
TIVX_TARGET_DSP2 Enable: YES
TIVX_TARGET_DSP_C7_1 Enable: YES
/************************************打印Target使能情况结束************************************/
opencv创建图像(高*宽*通道数):5*16*1
img.elemSize(): 1
img.elemSize1(): 1
img.step: 16
img.step1(): 16
---------------------------------打印opencv创建的图像的所有像素---------------------------------
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
---------------------------------打印vxCreateImageFromHandle创建的图像的所有像素---------------------------------
/************************************打印图像像素值************************************/
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
/************************************打印图像像素值结束************************************/
---------------------------------打印vxNotNode输出图像的所有像素---------------------------------
/************************************打印图像像素值************************************/
90, 30, 1, 1, 22, 0, 0, 0, 33, 0, 0, 0, 44, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
/************************************打印图像像素值结束************************************/30433.719841 s: VX_ZONE_INIT:[tivxHostDeInitLocal:107] De-Initialization Done for HOST !!!30433.724260 s: VX_ZONE_INIT:[tivxDeInitLocal:193] De-Initialization Done !!!
APP: Deinit ... !!!
REMOTE_SERVICE: Deinit ... !!!
REMOTE_SERVICE: Deinit ... Done !!!
IPC: Deinit ... !!!
IPC: DeInit ... Done !!!
MEM: Deinit ... !!!
DDR_SHARED_MEM: Alloc's: 1 alloc's of 80 bytes
DDR_SHARED_MEM: Free's : 1 free's of 80 bytes
DDR_SHARED_MEM: Open's : 0 allocs of 0 bytes
DDR_SHARED_MEM: Total size: 536870912 bytes
MEM: Deinit ... Done !!!
APP: Deinit ... Done !!!
相关文章:
TIOVX:opencv的Mat类图像零拷贝转为openvx的vx_image格式,通过Not节点无效果问题记录
问题描述 代码中,创建了一个opencv的Mat图像(并打印了所有的像素值),然后通过vxCreateImageFromHandle函数将Mat图像转为了vx_image图像(通过映射的方式打印了所有的像素值,通过日志可以看出与之前打印相同)。然后创建graph,将其作…...

变压器故障诊断(python代码,逻辑回归/SVM/KNN三种方法同时使用,有详细中文注释)
视频效果:变压器三种方法下故障诊断Python代码_哔哩哔哩_bilibili代码运行要求:tensorflow版本>2.4.0,Python>3.6.0即可,无需修改数据路径。 1.数据集介绍: 采集数据的设备照片 变压器在电力系统中扮演着非常重要的角色。…...

ASEMI探索整流桥GBU814的独特优势和应用领域
编辑-Z 整流桥GBU814在众多电子元件中独树一帜,可在多种设备中发挥其重要作用。作为一款集高效性能和可靠稳定性于一身的整流桥,GBU814已在全球范围内赢得了广泛的好评。在这篇文章中,我们将详细介绍GBU814整流桥的优势和应用领域。 让我们首…...
js脚本自动化之葫芦娃
什么是葫芦娃? 贵州特产平台(扶贫助农平台)有很多,但都大同小异,就连模样都像一个娘生的,所以戏称为葫芦娃平台 #小程序://航旅黔购/1nkYlNRVzm0Gg9x #小程序://贵旅优品/7zz6mtnSVgDfyqa #小程序://新联惠购/ibFdsuhWqIbczEd #小程序://贵盐黔品/u2TgExCUdkavrFe #小程…...

从零基础到精通IT:探索高效学习路径与成功案例
文章目录 导语:第一步:明确学习目标与方向选择适合的IT方向设定具体的学习目标咨询和调研 第二步:系统学习基础知识选择适合的编程语言学习数据结构和算法掌握操作系统和计算机网络基础 第三步:实践项目锻炼技能选择合适的项目编写…...
2023.8.8巨人网络数据开发工程师面试复盘
1 概述 问题一览 总体感觉良好,通过面试官的介绍可知这个岗位偏向离线数仓。 1.自我介绍 2.询问了其中一段实习经历 3.讲下你说用过的Linux命令 4.讲下HIVE的内部表和外部表有什么不同 *5.讲下你使用过的Hive函数(好好在复习下多准备几个吧)…...

Python Opencv实践 - 图像仿射变换
import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) rows,cols img.shape[:2] print(img.shape[:2])#使用getAffineTransform来获得仿射变换的矩阵M #cv.getAffineTransform(…...

如何使用CSS实现一个模态框(Modal)效果?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现模态框(Modal)效果⭐ HTML 结构⭐ CSS 样式⭐ JavaScript⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎…...
关于API数据接口获取商品的数据的说明
获取商品数据已经成为许多应用程序的重要组成部分。为了实现这一目标,许多公司和技术开发者使用API数据接口来获取相关数据。本文将详细介绍如何使用API数据接口获取商品数据,并使用Python作为编程语言示例来展示相关代码。 API数据接口是一种通信协议&…...

Redis持久化——AOF
介绍 Redis是运行在内存中的数据库,当我们关闭了Redis服务器后,内存中的数据会丢失吗? 答案是不会的,因为Redis有持久化功能,能够将内存中的数据保存到磁盘中的文件,以此来实现数据的永久保存。 在Redis中…...
Qt 嵌入Vue项目 flapMap 浏览器兼容性问题
最近有个需求,Qt工程需要嵌入vue项目,本来是很简单的事情。在我的PC上启动Vue项目,同事PC上用浏览器通过IP地址可以正常加载vue项目,但用Qt嵌入总是失败。问题定位步骤如下: 1)换了一个简单的vue项目&…...

1.SpringMVC接收请求参数及数据回显:前端url地址栏传递参数通过转发显示在网页
1、SpringMVC 处理前端提交的数据 1.1 提交的域名和处理方法的参数不一致,使用注解解决 1.2 提交的域名和处理方法的参数不一致,使用注解解决 1.3 提交的是一个对象 2、前端url地址栏传递的是一个参数 请求地址url:http://localhost:8080/s…...
C++ Primer Plus: 第10章(2)
第10章编程题: (1) Account.h: #ifndef ACCOUNT_H_ #define ACCOUNT_H_#include <string>class Account { private:std::string name ;std::string code ;double money ; public:Account() ;Account(std::string Name, std::string Co…...
c++中的extern关键字
extern关键字主要修饰变量或函数,表示该函数可以跨文件访问,或者表明该变量在其他文件定义,在此处引用。 extern修饰变量 (1)如果某变量int m在a.c中定义声明,则其他b.c文件访问时,需要用exte…...
javaScript:快乐学习计时器
目录 一.前言 二.计时器 1.计时器的分类 2. 创建计时器的方式 创建间隔计时器 创建方式三种 1.匿名函数 2.使用函数直接作为计时器的执行函数 2.使用函数直接作为计时器的执行函数,用字符串的形式写入 3.计时器的返回值 4.清除计时器 5.延迟计时器 相关代码 一.前言 在…...
onnxruntime 支持的所有后端
1 代码导出 import onnxruntime as ort aaa ort.get_all_providers() print(aaa)1. 1 下面是ort支持的所有后端 TensorrtExecutionProvider, CUDAExecutionProvider, MIGraphXExecutionProvider, ROCMExecutionProvider, OpenVINOExecutionProvider, DnnlExecutionProvider…...

k8s 自身原理 5
我们知道容器是通过 pod 来承载的,我们在 k8s 中,服务都是跑在 pod 里面的,pod 里面可以跑 1 个容器,或者跑多个容器,那么咱们 pod 里面跑 1 个服务容器,咱真的就以为里面就只有这样个容器吗? …...

机器视觉应用开发什么最重要?
(QQ群有答疑)零基础小白快速上手海康VisionMaster开发系列课程 高级语言在机器视觉就是工具,机器视觉软件,在机器视觉中也是工具,在机器视觉应用开发中,图像处理是最重要的,一切看图像ÿ…...

React+Typescript使用接口泛型处理props
好 刚讲完组件 那么 这次 我们来看一下 数据传递的 props 还是上文的案例 例如 我们想将 title 传给Hello组件 之前我们可以直接这样 以一个标签属性的形式传过去 而我们在子组件中 这样去使用 但现在 我们从编辑器中都可以看出 这种写法已经不行了 然后 我们将 hello 组件…...
自定义python文件import导入ModuleNotFoundError: No module named ‘***‘ 问题
自定义python文件import导入ModuleNotFoundError: No module named ‘***’ 问题 错误代码: import configparser import os.path import sys from bin import swk_mysql_create, swk_redis_create这里导入自定义python文件,其中swk_mysql_create.py文…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...

R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...