将图片数据转换为张量(Go并发处理)

        在Go语言中,将图片数据转换成Tensor通常需要依赖一些外部库,编写一个简单的程序,该程序批量同时处理图片,将其转换为对应的浮点数张量。 

         假设图片是单通道(灰度图)或者三通道(彩色图),我们将图片的每个像素值归一化到0到1之间,然后创建一个gorgonia张量。

        注意sync.WaitGroup和sync.Mutex的使用

package mainimport ("fmt""image""image/png""os""sync""gorgonia.org/gorgonia"
)func processImage(imagePath string, tensor *gorgonia.Tensor, wg *sync.WaitGroup, lock *sync.Mutex) error {img, err := os.Open(imagePath)if err != nil {return fmt.Errorf("error opening image file: %v", err)}defer img.Close()imgBounds := img.Bounds()img = image.NewRGBA(imgBounds)err = png.Decode(img, img)if err != nil {return fmt.Errorf("error decoding image: %v", err)}lock.Lock()defer lock.Unlock()for y := imgBounds.Min.Y; y < imgBounds.Max.Y; y++ {for x := imgBounds.Min.X; x < imgBounds.Max.X; x++ {r, g, b, _ := img.At(x, y).RGBA()tensor.SetWithShape(y, x, 0, float32(r)/255.0) // 设置红色通道tensor.SetWithShape(y, x, 1, float32(g)/255.0) // 设置绿色通道tensor.SetWithShape(y, x, 2, float32(b)/255.0) // 设置蓝色通道}}return nil // 没有错误发生
}func main() {var wg sync.WaitGroupvar lock sync.MuteximagePaths := []string{"path/xcl/image1.png","path/xcl/image2.png","path/xcl/image3.png",}// 假设所有图片大小和通道数相同img, err := os.Open(imagePaths[0])if err != nil {panic(err)}defer img.Close()imgBounds := img.Bounds()tensorShape := gorgonia.WithShape(imgBounds.Dy(), imgBounds.Dx(), 3) // 假设RGB图片tensor := gorgonia.NewTensor(tensorShape)for _, imagePath := range imagePaths {wg.Add(1)go func(imagePath string, tensor *gorgonia.Tensor, wg *sync.WaitGroup, lock *sync.Mutex) {defer wg.Done()err := processImage(imagePath, tensor, wg, &lock)if err != nil {fmt.Printf("Error processing image %s: %v\n", imagePath, err)}}(imagePath, tensor, &wg, &lock)}// 等待所有goroutines完成wg.Wait()// 在这里检查是否有任何错误发生for _, imagePath := range imagePaths {fmt.Printf("Processed image: %s\n", imagePath)}fmt.Println(tensor)
}

   请注意,这个例子假设图片是PNG格式的,并且是RGB彩色图片。

如果实际中,图片是其他格式或颜色模式,那需要另外再调整代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/816662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文笔记:SmartPlay : A Benchmark for LLMs as Intelligent Agents

iclr 2024 reviewer评分 5688 引入了 SmartPlay&#xff0c;一种从 6 种不同游戏中提取的基准 衡量LLM作为智能体的能力 1 智能代理所需的能力 论文借鉴游戏设计的概念&#xff0c;确定了智能LLM代理的九项关键能力&#xff0c;并为每项能力确定了多个等级&#xff1a; 长文…

Unity WebGL 2022 Release-Notes

&#x1f308;WebGL 2022 Release-Notes 版本更新内容2022.3.16WebGL: Fixed a bug that causes a parsing error due to misplaced regex.(UUM-21896)2022.3.15WebGL: Fixed a bug that caused for input to not be released when focus was removed from canvas on Windows C…

一个基于单片机内存管理-开源模块

概述 此模块是一位大佬写的应用于单片机内存管理模块mem_malloc,这个mem_malloc的使用不会产生内存碎片,可以高效利用单片机ram空间。 源码仓库:GitHub - chenqy2018/mem_malloc mem_malloc介绍 一般单片机的内存都比较小,而且没有MMU,malloc 与free的使用容易造成内存碎…

27、滑动窗口

滑动窗口 题目描述 给定一个大小为 n ≤ 1 0 6 n≤10^6 n≤106 的数组。 有一个大小为k的滑动窗口&#xff0c;它从数组的最左边移动到最右边。 您只能在窗口中看到k个数字。 每次滑动窗口向右移动一个位置。 以下是一个例子&#xff1a; 该数组为[1 3 -1 -3 5 3 6 7]…

《由浅入深学习SAP财务》:第2章 总账模块 - 2.7 总账模块报表 -2.7.2 对外报表:现金流量表

2.7.2 对外报表&#xff1a;现金流量表 现金流量表包括直接法和间接法。使用SAP出具现金流量表&#xff0c;一般只能出具直接法报表。间接法是指按照净利润倒推出现金流量的发生额&#xff0c;由于其中存在人为“分析”的因素&#xff0c;很难直接通过科目的加加减减得出所需要…

神经网络模型底层原理与实现10-softmax的实现

import torch from IPython import display from d2l import torch as d2l batch_size256 #定义训练和验证数据集 train_iter,test_iterd2l.load_data_fashion_mnist(batch_size) #参数初始化,把输入图片看成长度784的向量&#xff0c;这个数据集有十个类别&#xff0c;输出为1…

小蚕爬树问题

小蚕爬树问题 问题描述&#xff1a; 编写一个函数 int day(int k,int m,int n),其功能是&#xff1a;返回小蚕需要多少天才能爬到树顶&#xff08;树高 k 厘米&#xff0c;小蚕每天白天向上爬 m 厘米&#xff0c;每天晚上下滑 n 厘米&#xff0c;爬到树顶后不再下滑&#xff0…

(六)C++自制植物大战僵尸游戏关卡数据讲解

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/xjvbb 游戏关卡数据文件定义了游戏中每一个关卡的数据&#xff0c;包括游戏类型、关卡通关奖励的金币数量、僵尸出现的波数、每一波出现僵尸数量、每一波僵尸出现的类型等。根据不同的游戏类型&#xff0c;定义了不同的通…

kafka ----修改log4j、jmx、jvm参数等

1、修改log4j 日志路径 在kafka-run-class.sh文件中修改如下配置&#xff0c;将 LOG_DIR变量指定为自己想要存储的路径 # Log directory to use if [ "x$LOG_DIR" "x" ]; thenLOG_DIR"$base_dir/logs" fi2、修改jmx参数 在kafka-run-class.s…

C++11 数据结构3 线性表的循环链式存储,实现,测试

上一节课&#xff0c;我们学了线性表 单向存储结构&#xff08;也就是单链表&#xff09;&#xff0c;这个是企业常用的技术&#xff0c;且是后面各种的基本&#xff0c;一定要牢牢掌握&#xff0c;如果没有掌握&#xff0c;下面的课程会云里雾里。 一 &#xff0c;循环链表 1…

stm32报错问题集锦

PS&#xff1a;本文负责记录本人日常遇到的报错问题&#xff0c;以及问题描述、原因以及解决办法等&#xff0c;解决办法百分百亲测有效。本篇会不定期更新&#xff0c;更新频率就看遇到的问题多不多了 更换工程芯片型号 问题描述 例程最开始用的芯片型号是STM32F103VE&#…

c++11 标准模板(STL)本地化库 - 平面类别(std::codecvt) - 在字符编码间转换,包括 UTF-8、UTF-16、UTF-32 (四)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 在字符编码间转换&#xff0c;包括 UTF-8、UTF-16、UTF-32 std::…

C++设计模式探讨(1)-工厂模式

设计模式是架构设计之术&#xff0c;但不是道。是技巧和方法论&#xff0c;但不是核心思想。设计模式是世界规律的提取&#xff0c;但无法体现具体的形式。所以&#xff0c;设计模式是一个尴尬的存在&#xff0c;它有一定的价值&#xff0c;但却又十分有限。架构设计者需要做的…

IOS 短信拦截插件

在使⽤iOS设备的时候, 我们经常会收到1069、1065开头的垃圾短信, 如果开了iMessage会更严重, 各种乱七⼋糟的垃圾信息会时不时地收到。 从iOS11开始, ⼿机可以⽀持恶短信拦截插件了. 我们可以通过该插件添加⼀些规则通过滤这些不需要的信息. ⼀. 使⽤xcode新建⼀个项⽬ 【1】…

浦大喜奔APP8.0智能升级,发力数字金融深化五大金融篇章服务

1. 浦大喜奔立足科技赋能持续迭代升级&#xff0c;筑牢用户体验护城河 浦发信用卡中心坚持数字科技与客户体验双轮驱动&#xff0c;以科技赋能发展&#xff0c;优化整体系统性能&#xff0c;全方位支撑浦大喜奔 APP提高线上客户服务能力与体验&#xff0c;积极服务民生消费&a…

pyqt和opencv结合01:读取图像、显示

在这里插入图片描述 1 、opencv读取图像用于pyqt显示 # image cv2.imread(file_path)image cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 将图像转换为 Qt 可接受的格式height, width, channel image.shapebytes_per_line 3 * widthq_image QImage(image.data, width, hei…

Tomcat源码解析——Tomcat的启动流程

一、启动脚本 当我们在服务启动Tomcat时&#xff0c;都是通过执行startup.sh脚本启动。 在Tomcat的启动脚本startup.sh中&#xff0c;最终会去执行catalina.sh脚本&#xff0c;传递的参数是start。 在catalina.sh脚本中&#xff0c;前面是环境判断和初始化参数&#xff0c;最终…

MES生产管理系统:私有云、公有云与本地化部署的比较分析

随着信息技术的迅猛发展&#xff0c;云计算作为一种新兴的技术服务模式&#xff0c;已经深入渗透到企业的日常运营中。在众多部署方式中&#xff0c;私有云、公有云和本地化部署是三种最为常见的选择。它们各自具有独特的特点和适用场景&#xff0c;并在不同程度上影响着企业的…

kafka---broker相关配置

一、Broker 相关配置 1、一般配置 broker.id 当前kafka服务的sid(server id)&#xff0c;在kafka集群中&#xff0c;该值是唯一的&#xff08;unique&#xff09;&#xff0c;如果未设置此值&#xff0c;kafka会自动生成一个int值&#xff1b;为了防止自动生成的值与用户设置…

.net框架和c#程序设计第三次测试

目录 一、测试要求 二、实现效果 三、实现代码 一、测试要求 二、实现效果 数据库中的内容&#xff1a; 使用数据库中的账号登录&#xff1a; 若不是数据库中的内容&#xff1a; 三、实现代码 login.aspx文件&#xff1a; <% Page Language"C#" AutoEventW…