图像前后端的数据交互及图像格式的转换(python、opencv)

Opencv-python(cv2)图像读取、显示与保存,看这一篇就够了 Opencv-python(cv2)图像读取与显示,看这一篇就够了图像读取imread函数的坑图像显示imshow函数的坑读取与显示图像常见报错提示: 图像读取 opencv读取图像主要依赖于cv2.imread()函数,cv2.imread()的函数原型为Mat imread( const string& filename, int flags=1 ),其中Mat为Opencv最重要的数... 阅读详情

图像前后端的数据交互及图像格式的转换(python、opencv)

前言

最近毕业答辩需要做个演示系统(图像去雨),要求将选择图片的去雨图片展示出来与原图进行对比,我决定用网页的形式做个演示系统。原先想着用java调用python脚本运行,但模型的输入和输出都是图片矩阵数据,不好操作,后来就直接用python的flask框架简单的实现了前后端交互。

前端页面

<p>图片预览:</p>
                <div id="test-image-preview"></div>
              <input type="file" id="test-image-file" name="test" accept="image/gif, image/jpeg, image/png, image/jpg">

前端页面用file类型的input选择文件,通过js代码将图片背景方式显示在div内,实现预览。
在 reader.onload中获取的data即为图像的base64编码,其编码本体为‘data:image/jpeg;base64,’后的字符,

onload=function () {
            var
                fileInput = document.getElementById('test-image-file'),

                preview = document.getElementById('test-image-preview');
            // 监听change事件:
            fileInput.addEventListener('change', function() {
               // 检查文件是否选择:
                if(!fileInput.value) {
                    alert('没有选择文件');
                    return;
                }
                // 获取File引用:
                var file = fileInput.files[0];
                //判断文件大小
                var size = file.size;
                // if(size >= 1*1024*1024){
                //     alert('文件大于1兆不行!');
                //     return false;
                // }
                // 获取File信息:

                if(file.type !== 'image/jpeg' && file.type !== 'image/png' && file.type !== 'image/gif') {
                    alert('不是有效的图片文件!');
                    return;
                }
                // 读取文件:
                var reader = new FileReader();
				//读取操作成功时调用
                reader.onload = function (e) {
                    var
                        data = e.target.result; // 'data:image/jpeg;base64,/9j/4AAQSk...(base64编码)...}'
                    preview.style.backgroundImage = 'url(' + data + ')';
                    image=data;
                };
                // 以DataURL的形式读取文件:
                reader.readAsDataURL(file);
                //console.log(image);
            });
        }

css控制背景图自适应div的大小(长或宽),不重复且位于正中间。

le type="text/css">
        #test-image-preview {
            border: 1px solid white;

            height: 400px;
            background-size: contain;
            background-repeat: no-repeat;
            background-position: center center;
            margin-right: 50px;

        }

获得图片的base64编码就可以使用ajax将其传到后台。由于后台处理较久,这里使用了一个loading的div来改善用户的等待体验。

var image="";
        function fun()
        {
            if(image=="")
            {
                alert("没有选择文件");
                return;
            }

			var ajaxTimeout=$.ajax({
				async:true,
				url:"/image",
				timeout:1000*120,
				type:'post',
				data:image,
                beforeSend:function(){
				    $("#loading").show()
                },
				success:function(data){
					//alert(data)
				image_result=document.getElementById("image_result");
                image_result.style.backgroundImage='url(' + 'data:image/jpg;base64,'+data + ')';
                $("#loading").hide()
				},
				complete:function(XMLHttpRequest,status){ //请求完成执行
					if(status=='timeout')
					{
						ajaxTimeout.abort();
						alert("超时");
					}
				}
			}
			);
            

        }
#loading{
            position: absolute;
            left: 0px;
            top: 0px;
            width: 100%;
            height: 100%;
            display: none;
            z-index: 999;
            opacity: 0.8;
            background: url("static/loading.gif");
            background-repeat:no-repeat;
            background-size: 100% 100%;
            -moz-background-size: 100% 100%;
        }

后台处理

后台接收到base64数据后要先解析成opencv能读取的格式。注意接收到的字符要去掉头部‘data:image…base64,’。
(base64–>二进制–>矩阵形式)

imagecode = request.get_data()
    # 去除头部data:image...base64,
    strlist = str(imagecode).split(',')
    b64_img = ''
    for i in strlist[1:]:
        b64_img += i

    img_b = base64.b64decode(b64_img)  # 二进制字符
    # 注意cv2默认为 BGR顺序,而其他软件一般使用RGB
    img = cv2.imdecode(np.frombuffer(img_b, np.uint8), cv2.COLOR_RGB2BGR)
    print(img.shape)
    # cv2.imshow('', img)
    # #必须加这个,不然显示图片时会卡死
    # cv2.waitKey()

将数据输入模型后得到的输出数据再编码成base64传到前端。
得到的数据是矩阵形式的res_img(矩阵形式–>二进制–>base64)。

   res_b=cv2.imencode('.jpg',res_img)[1].tostring()
    res_bs64=base64.b64encode(res_b)
    print('返回数据')
    return res_bs64

此时返回的base64数据不带头信息‘data:image…base64,’,在前端页面显示时要加上。

image_result.style.backgroundImage='url(' + 'data:image/jpg;base64,'+data + ')';

总结

此次毕业设计选题为图像去雨,在测试时图片稍微大点就爆内存,而且运行过程也很慢,在测试或演示时可尽量将图片裁剪小点,这样会改善许多,同时前端的请求可以将超时时间(timeout)设长点。(最开始用一张张完整的图片测试不是报内存不足就是后台运算时间很久,前端根本接受不到数据,百度查了许多优化办法,要么有些不懂,要么没啥效果,甚至直接又加了4g内存,表现也是差强人意,最后还是直接减少输入图片的大小,简单粗暴,效果也是最明显??)

python中 opencv、PIL、Numpy 图像格式转换 # PIL =&gt; OpenCV img = image.load_img(img_path) img = cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR) # OpenCV =&gt; PIL img = cv2.imread(img_path) img = Image.fromarray(cv2.cvtColor(img, c... 阅读详情

相关推荐

【UV打印机】PrintExp打印软件教程(六)-高级模式(马达)

输入高级模式密码进入高级模式高级模式界面有操作栏、控制栏、参数栏及参数界面操作栏名称功能说明文件加载数据从板卡加载参数保存将参数保存到主板退出退出高级模式固件导入固件导入配套版本下的固件配置*xpcfx导出固件导出当前使用的固件配置*xpcfx导入波形文件导入对应的波形文件*waf操作初始化系统继续初始化动作复位X轴复位回原点控制栏可进行小车运动、闪喷操作(此闪喷为点击进行闪喷,不受平台位置限制),无清洗功能。

Print World的专栏 3112

python+html实现前后端数据交互界面显示

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。话不多说,先来实现一个简单的计算功能吧,前端输入计算的数据,后端计算结果,返回结果至前端进行显示。点击进行计算按钮,页面跳转,显示计算结果。..

m0_67402588的博客 2090

TMS320F28377D的sys/bios双核工程配置详解——从零搭建到RAM优化

本文详细解析了TMS320F28377D双核系统在sys/bios环境下的工程配置与RAM优化策略。从开发环境搭建、SYS/BIOS工程创建到双核CMD文件配置,提供了实战技巧和常见问题解决方案,帮助开发者高效实现电力电子控制系统中的双核协作与性能优化。

weixin_28292761的博客 600

python与html交互实现图片上传_python 实现上传图片并预览的3种方法(推荐)

在常见的用户注册页面,需要用户在本地选择一张图片作为头像,并同时预览。常见的思路有两种:一是将图片上传至服务器的临时文件夹中,并返回该图片的url,然后渲染在html页面;另一种思路是,直接在本地内存中预览图片,用户确认提交后再上传至服务器保存。这两种方法各有利弊,方法一很明显,浪费流量和服务器资源;方法二则加重了浏览器的负担,并且对浏览器的兼容性要求更高(在某些低版本中的IE浏览器不支持)。以下...

weixin_39853892的博客 2053

FoundationPose 4090部署 真实场景迁移

复现并应用foundationpose

m0_52835296的博客 613

ENVI5.6+SARscape实战:基于哨兵一号的PS与SBAS时序InSAR地表形变监测全流程解析

本文详细解析了使用ENVI5.6和SARscape软件基于哨兵一号数据进行PS与SBAS时序InSAR地表形变监测的全流程。从数据获取、预处理到PS-InSAR和SBAS-InSAR处理,提供了实用技巧和优化建议,帮助用户高效完成地表形变监测任务。

weixin_29245767的博客 1154

如何加载训练好的CNN模型来做图像数据集分类?

加载使用训练好的CNN模型

莫邪莫急的博客 8486

为什么传统CNN在视网膜分割中败给Mamba?从血管拓扑学揭秘Serp-Mamba的蛇形扫描黑科技

本文深入分析了传统CNN在视网膜血管分割任务中的局限性,特别是在处理高分辨率图像和复杂血管拓扑结构时。针对这些问题,文章重点介绍了Serp-Mamba模型的核心创新——蛇形交织自适应扫描(SIA)机制,该机制通过让扫描路径自适应地贴合血管曲率,并结合模糊驱动双重校准(ADDR)模块应对极端类别失衡,从而在视网膜血管分割任务上实现了性能的显著突破。

ss78901的博客 894

【计算机网络基础——系列13】python操作数据库储存图片,取出图片放到前端页面展示

系列文章目录 【计算机网络基础——系列1】-matlab与python使用socket udp进行进程间通信 【计算机网络基础——系列2】-matlab与python使用socket tcp进行进程间通信 【计算机网络基础——系列3】输入url后页面会遇到的问题 【计算机网络基础——系列4】关于HTTP请求的相关内容 【计算机网络基础——系列5】前端遇到的三种网络攻击 【计算机网络基础——系列6】浏览器缓存之cookie、session、localstorage 【计算机网络基础——系列7】浏览器缓存之—h

让程序飞会的博客 2281

ESP32-C3入门教程 环境篇③——VS Code IDE快速入门

文章目录一、安装Visual Studio Code二、安装扩展三、配置ESP-IDF 插件四、创建工程五、配置工程5.1 选择目标芯片5.2 项目配置六、编译工程七、固件分析七、固件下载八、串口日志九、单步调试 一、安装Visual Studio Code 下载并安装Visual Studio Code 二、安装扩展 左侧扩展 搜索espressif 点击安装 三、配置ESP-IDF 插件 按下F1按键 输入configure esp-idf extension EXPRESS,如果你

8304

Python爬虫实战:美团商家数据采集系统

本文将详细介绍如何使用Python最新技术栈构建高效的美团商家信息采集系统。内容涵盖异步爬虫、反爬对抗、数据存储、可视化分析等完整流程,提供可落地的代码方案和工程实践。

2201_76125261的博客 2660

【python/flask】将PIL/OpenCV图像渲染到页面

说在前面 python版本:3.7.3 flask版本:2.0.1 场景 方法 from io import BytesIO def serve_pil_image(pil_img): img_io = BytesIO() pil_img.save(img_io, 'PNG') img_io.seek(0) return send_file(img_io, mimetype='image/png')

o0o 1566

AI Agent开发第49课-DIFY让AI自动预约排班后发企业微信通知-MongoDb-Redis-企业微信调用

我们的Dify会讲得很透彻,坚持喂饭级教程,从一个基本的AI自动预约客户到自动记录客户的信息再到自动判断下一步如何走全部是AI化的,这是一个真正的AI原生应用,它来自于我的一个大型物业公司用AI自动预约系统中的一部分。我们会使用这个预约流做完整的Dify例子来讲完,因为它太有代表性了。工作流中的控制反转、AI决策下一步怎么走、人为干涉、用户行为判断、外部中间件如Redis,今天我们就要讲到在Dify中调用MongoDB的数据以及企业微信通知来作为预约派单的最后一步了。

打造全国最全的AI Agent开发知识领域的博客 1753

python中PIL.Image,OpenCV,Numpy图像格式相互转换

图像处理领域中有很多开源成熟的工具模块和方法可以直接进行使用,目前我主要使用到的库主要包括:PIL、Numpy和OpenCV,其中,PIL是Python自带的模块,在python3中变成了Pillow,名字不同但是方法都是一样的,Numpy是一个科学数值计算模块,因为图像数据本质上是矩阵数据,所以这里也就用到了Numpy模块了,最后一个OpenCV在图像数据处理领域里面是大名鼎鼎的存在...

Together_CZ的博客 6528

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

python实现图像格式转换(bmp、jpg、png)

【代码】python实现图像格式转换(bmp、jpg、png)

Major_S的博客 7990

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

python 中PIL.Image和OpenCV图像格式相互转换

PIL.Image转换成OpenCV格式: import cv2 from PIL import Image import numpy   image = Image.open("plane.jpg") image.show() img = cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR) cv2.imshow("OpenCV",img)...

gmHappy 5200

python中PIL.Image和OpenCV图像格式相互转换

PIL.Image转换成OpenCV格式 import cv2 from PIL import Image import numpy image = Image.open("plane.jpg") image.show() img = cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR) cv2.imshow("OpenCV",img) c...

牧野的博客 7万+

Python3下OpenCV图像格式转换方法

   OpenCV图像格式是BGR,和我们日常RGB图像颜色通道不一致,恰好相反。虽然颜色通道不一致, 但每个颜色通道的值是没有问题的,如果解析出来,重新组合,就没有问题了。     下面的代码,test_probelm是观察效果。而method1、method2、method3提示了使用的三种方法。 __author__ = 'jcy' import cv2 import matplotlib....

机器之我心的博客 2640

Python玩转图像格式转换

最近在做图片相关的工作,面对各种格式的图片转换,在OpenCV跟Pillow之间来回切换。觉得有必要把这些东西记录下来,以备不时之需。 首先介绍一下图片的常见三种存储格式。 1、图片的存储格式 不同的场景,经常会使用不同存储格式的图片。 在给人们展示时,一般是采用文件的方式进行存储,常见的有jpg,png,jpeg等等文件格式,便于人们区分理解。 在计算机网络中传输时,一般是采用字节流的方式进行存...

cheney的专栏 2万+

Python-OpenCV 笔记8 -- PIL.Image和OpenCV图像格式转换

Python-OpenCV 笔记8 – PIL.Image和OpenCV图像格式转换 1、PIL.Image 转 OpenCV import cv2 from PIL import Image import numpy # 用 PIL.Image 打开图片 image = Image.open('1.jpg') # 转为 OpenCV 图像格式 img = cv2.cvtColor(num...

Wang_Jiankun的博客 1758

一图看懂Python生态圈图像格式转换

在Python生态圈里,最常用的图像库是PIL——尽管已经被后来的pillow取代,但因为pillow的API几乎完全继承了PIL,所以大家还是约定俗成地称其为PIL。除PIL之外,越来越的程序员习惯使用openCV来处理图像。另外,在GUI库中,也有各自定义的图像处理机制,比如wxPyton,定义了wx.Image做为图像处理类,定义了wx.Bitmap做为图像显示类。

Python作业辅导员 - 天元浪子 9946

python 图像格式转换_python用opencv读取图像如何做格式转换

本文重点要说的,是通过C函数进行转换首先,从numpy array获得C数据指针:h,w,c=frame1.shapeif not frame1.flags[‘C_CONTIGUOUS’]:frame1= np.ascontiguousarray(frame1, dtype=frame1.dtype) # 转换成连续存放data_ptr = cast(frame1.ctypes.data, c_c...

weixin_29235525的博客 1407

PyQt转换显示Python-OpenCV图像实现图形化界面的视频播放

在Python-OpenCV中显示图像时调用的是一个单独的窗口,有时我们需要将这些图像显示在PyQt的图形化界面上,这样就可以将整个图像显示与PyQt图形化界面进行整合。但OpenCV格式的图像和PyQt格式的图像并不同,这就需要进行转换。 本文介绍了OpenCV格式的图像转PyQt格式的图像,并通过OpenCv读取视频文件在PyQt界面中播放的案例实现。

老猿Python 6995

从PIL到OpenCV:pyzbar支持的图像格式全解析

在Python条形码识别领域,**pyzbar图像格式支持**是开发者最关心的问题之一。作为一款强大的条形码和QR码识别库,pyzbar提供了极其灵活的图像格式兼容性,让开发者能够轻松集成到各种图像处理工作流中。无论你使用PIL、OpenCV、numpy还是其他图像处理库,pyzbar都能无缝对接,大大简化了条形码识别的开发流程。 ## 🔍 pyzbar图像格式支持概览 pyzbar支持多种

gitblog_00814的博客 755

【OpenCV-Python】关于Python中OpenCV的图像格式问题以及图像遍历问题

一开始学习OpenCV是用的C++,但是由于后面课程原因,以及后来学习深度学习相关需要用到python,发现了opencv在各种语言下的一些差异。在这里记录一下所遇到的一些问题~ 关于图像读入的问题 路径中含中文的解决方式 在用imread读入图像时,若是路径中含有中文,则会出现错误error: (-215:Assertion failed) !_src.empty(),即并没有成功读入~ 所以重写一个cv_imread函数,调用后就解决了~ def cv_imread(filepath): cv_

weixin_45780839的博客 5757

PIL.Image和OpenCV图像格式相互转换

转载自: https://blog.youkuaiyun.com/dcrmg/article/details/78147219 ------ PIL.Image转换成OpenCV格式 import cv2 from PIL import Image import numpy image = Image.open("plane.jpg") image.show() img = cv2.cvtC...

Yl 5242
上一篇: colab挂载google云盘
下一篇: 傅里叶理解
Cestbo1
博客等级 码龄10年 53粉丝 21原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值