当前位置: 首页 > news >正文

遵义网站设计制作网站/营销网络是啥意思

遵义网站设计制作网站,营销网络是啥意思,商标注册网上缴费流程,门户网站制作方法概述 在计算机视觉项目中,使用样本时经常会遇到图像样本不统一的问题,比如图像质量,并非所有的图像都具有相同的质量水平。在开始训练模型或运行算法之前,通常需要对图像进行预处理,以确保获得最佳的结果。图像预处理…

概述

在计算机视觉项目中,使用样本时经常会遇到图像样本不统一的问题,比如图像质量,并非所有的图像都具有相同的质量水平。在开始训练模型或运行算法之前,通常需要对图像进行预处理,以确保获得最佳的结果。图像预处理包括调整大小和裁剪到降噪和归一化的各种技术。涉及的库有OpenCV、Pillow和scikit-image等。

图像预处理

图像预处理是将原始图像数据操作成可用和有意义格式的过程。它允许消除不希望的失真并增强计算机视觉应用所需的特定品质。预处理是准备图像数据输入到机器学习模型之前的重要步骤。

常用的图像预处理:

  1. 调整大小: 将图像调整到统一的大小对机器学习算法的正常运行至关重要。可以使用OpenCV的resize()方法来调整图像大小。

  2. 灰度化: 将彩色图像转换为灰度可以简化图像数据,并减少一些算法的计算需求。cvtColor()方法可以用来将RGB转换为灰度。

  3. 降噪: 可以应用平滑、模糊和过滤技术来去除图像中不希望的噪声。常用的降噪方法包括GaussianBlur()和medianBlur()方法。

  4. 归一化: 将像素的强度值调整到期望的范围通常在0到1之间,这可以提高机器学习模型的性能。scikit-image的Normalize()可以用来进行此操作。

  5. 二值化: 通过阈值处理将灰度图像转换为黑白。OpenCV中的threshold()方法用于二值化图像。

  6. 对比度增强: 可以使用直方图均衡化调整图像的对比度。equalizeHist()方法增强了图像的对比度。

图像加载与转换

处理图像之前,首先是加载图像,然后是把图像转换到需要用的到数据空间,以便它们可以被库处理。这里常用到OpenCV和Pillow。

加载
使用OpenCV加载图像:

import cv2
image = cv2.imread('path/to/image.jpg')

这将把图像加载为NumPy数组。OpenCV加载的图像在BGR颜色空间中,如果需要,可能需要将其转换为RGB。

使用Pillow加载图像:

from PIL import Image
image = Image.open('path/to/image.jpg')

这将加载图像并将其存储为PIL图像对象。Pillow支持的图像格式更加丰富,包括PSD、ICO和WEBP等。

在颜色空间之间转换

如果需要在不同的颜色空间之间转换图像,可以使用OpenCV或Pillow提供的函数能直接转换。例如,将BGR转换为灰度图像:

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

在这里插入图片描述

或者将RGB转换为HSV:

image = image.convert('HSV')

在这里插入图片描述

图像尺寸

调整和裁剪图像尺寸是图像预处理的非常重要第一步。由于图像具有不同的形状和大小,但许多机器学习算法通常需要标准大小的输入。因此,经常需要将图像调整和裁剪到特定的尺寸,如256x256或512X512像素。在Python中,OpenCV或Pillow库提供了图像的调整大小和裁剪方法。

使用OpenCV时,可以使用resize()函数来调整图像的大小。例如:

import cv2
img = cv2.imread('original.jpg')
resized = cv2.resize(img, (512, 512))

这将把图像调整为512x512像素。

要裁剪图像为正方形,可以计算裁剪的中心位置,并使用OpenCV的crop()函数。
例如:

height, width = img.shape[:2]
size = min(height, width)
x = (width - size) // 2
y = (height - size) // 2
cropped = img[y:y+size, x:x+size]

使用Pillow时,可以使用Image.open()resize()函数。
例如:

from PIL import Image
img = Image.open('original.jpg')
resized = img.resize((224, 224))

要裁剪图像,可以使用img.crop()函数。
例如:

width, height = img.size
size = min(width, height)
left = (width - size) // 2
top = (height - size) // 2
right = (width + size) // 2
bottom = (height + size) // 2
cropped = img.crop((left, top, right, bottom))

将图像调整大小和裁剪到标准尺寸是非常重要的,这样可以确保机器学习模型能够高效地处理图像,并提高结果的准确性。因此,花时间来精心调整和裁剪图像将会得到更好的模型性能。

图像归一化

在处理图像数据时,将像素值归一化以保持一致的亮度并提高对比度是很重要的。这使得图像更适合分析,并允许机器学习模型独立于光照条件学习模式。

重新缩放像素值:
最常见的归一化技术是将像素值重新缩放到0到1的范围内。这是通过将所有像素除以最大像素值(通常对于RGB图像为255)来完成的。例如:

import cv2
Img = cv2.imread('image.jpg')
normalized = Img / 255.0

这将把所有像素缩放到0和1之间,0为黑色,1为白色。

直方图均衡化:
另一个有用的技术是直方图均衡化。这通过在整个范围内展开像素强度来改善对比度。可以使用OpenCV进行应用:

eq_img = cv2.equalizeHist(img)

这对于对比度低且像素值集中在狭窄范围内的图像效果很好。

对于某些算法,将像素值归一化到零均值和单位方差是有用的。这可以通过减去均值并缩放到单位方差来完成:

mean, std = cv2.meanStdDev(img)
std_img = (img - mean) / std

这将使图像围绕零居中,标准差为1。

还有一些更复杂的归一化技术,但这三个方法——重新缩放到0-1范围、直方图均衡化和标准化——涵盖了基础知识,并将为的图像数据准备好大多数机器学习应用。确保对你的训练和测试数据应用相同的归一化,以获得最佳结果。

图像滤波

图像滤波的作用是平滑图像、去除噪声、增强图像等。滤波操作可以通过应用各种类型的滤波器来实现,其中包括线性滤波器(如均值滤波、高斯滤波)和非线性滤波器(如中值滤波)等。

高斯模糊:
高斯模糊过滤器减少图像中的细节和噪声。它通过对每个像素及其周围像素应用高斯函数来“模糊”图像。这可以帮助平滑边缘和细节,为边缘检测或其他处理技术做准备。

中值模糊:
中值模糊过滤器适用于从图像中去除盐和胡椒噪声。它的工作原理是用邻近像素的中值替换每个像素。这可以帮助平滑孤立的噪声像素,同时保留边缘。

拉普拉斯滤波器:
拉普拉斯滤波器用于检测图像中的边缘。它通过检测强度变化迅速的区域来工作。输出将是一个突出显示边缘的图像,然后可以用于边缘检测。这有助于识别和提取图像中的特征。

锐化掩蔽:
锐化掩蔽是一种用于锐化细节和增强图像边缘的技术。它的工作原理是从原始图像中减去模糊版本的图像。这放大了边缘和细节,使图像看起来更清晰。锐化掩蔽可以在特征提取或对象检测之前用于锐化细节。

双边滤波器:
双边滤波器在保留边缘的同时平滑图像。它通过考虑像素的空间接近度和颜色相似性来实现这一点。空间上靠近且颜色相似的像素将一起平滑。空间上远离或颜色差异很大的像素不会被平滑。这导致了一个具有锋利边缘的平滑图像。双边滤波器在边缘检测之前的噪声减少中可能有用。

使用分割技术检测和移除背景

检测和移除图像的背景是许多计算机视觉任务中的重要预处理步骤。分割可以将前景主题与背景分离,得到只包含主题的清晰图像。

在Python中,使用OpenCV和scikit-image进行图像分割有几种常见方法:

  1. 阈值化(Thresholding):阈值化是将图像转换为二值图像的方法。通过选择一个阈值,像素值高于阈值的被标记为前景,低于阈值的被标记为背景。你可以使用OpenCV的cv2.threshold()函数应用阈值化。
import cv2# 读取图像
img = cv2.imread('image.jpg', 0)  # 以灰度模式读取图像# 应用阈值化
ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)# 显示结果
cv2.imshow('Thresholded Image', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
  1. 边缘检测(Edge Detection):边缘检测可以找到图像中的边缘,即对象之间的边界。Canny边缘检测是一种流行的算法,你可以使用OpenCV的cv2.Canny()函数来实现。
import cv2# 读取图像
img = cv2.imread('image.jpg', 0)  # 以灰度模式读取图像# Canny边缘检测
edges = cv2.Canny(img, 100, 200)# 显示结果
cv2.imshow('Canny Edge Detection', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
  1. 区域生长(Region Growing):区域生长是一种从种子点开始,逐步将相邻像素添加到区域中的方法。你可以使用scikit-image的skimage.segmentation.region_growing()函数来实现。
from skimage.segmentation import region_growing
import matplotlib.pyplot as plt# 读取图像
img = plt.imread('image.jpg')# 区域生长
seed = (100, 100)
region = region_growing(img, seed)# 显示结果
plt.imshow(region, cmap='gray')
plt.axis('off')
plt.show()
  1. 分水岭算法(Watershed Algorithm):分水岭算法将图像视为地形图,通过模拟水流的流动来分割图像。你可以使用scikit-image的skimage.segmentation.watershed()函数来实现。
from skimage.segmentation import watershed
from skimage.feature import peak_local_max
from scipy import ndimage
import numpy as np
import matplotlib.pyplot as plt# 读取图像
img = plt.imread('image.jpg')# 计算距离变换
distance = ndimage.distance_transform_edt(img)# 寻找峰值
local_maxi = peak_local_max(distance, indices=False, footprint=np.ones((3, 3)), labels=img)# 应用分水岭算法
markers = ndimage.label(local_maxi)[0]
labels = watershed(-distance, markers, mask=img)# 显示结果
plt.imshow(labels, cmap='nipy_spectral')
plt.axis('off')
plt.show()

通过分割,可以从图像中隔离出主题。分割是一个关键的第一步,它允许将计算机视觉模型集中在图像最重要的部分——前景主题上。

数据集增强

数据增强是一种通过生成新的图像来人为扩展数据集大小的技术,有助于减少过拟合并提高模型的泛化能力。常见的图像数据增强包括:

  1. 翻转和旋转:对图像进行水平或垂直翻转,以及90度、180度、270度的旋转,可以生成新的数据点。这样做可以使模型更好地适应不同的视角和方向。

  2. 裁剪:将图像裁剪到不同的大小和比例,可以创建具有不同视野的新图像。随机裁剪和特定比例的裁剪都是常见的方法。

  3. 颜色调整:调整图像的亮度、对比度、色调和饱和度可以创建具有不同外观的图像。但要小心,不要使图像过度扭曲,以免模型混淆。

  4. 图像叠加:在图像上叠加透明图像、纹理或噪声可以创建原始数据的变化。例如,添加水印、标志、污垢或高斯噪声等。

  5. 结合技术:结合多种增强技术可以进一步扩展数据集。例如,结合翻转、旋转、裁剪和颜色调整,可以生成更多样化的图像。

通过数据增强,可以扩展数据集的大小,而无需收集更多的原始图像。这有助于减少过拟合并提高模型的性能,同时也有助于节省训练时间和成本。但要注意不要过度增强,以免导致图像失真或模型混淆。

预处理步骤

对于图像项目项目,选择正确的预处理技术取决于数据的特点和项目的目标。常见的预处理步骤:

  1. 调整大小:将图像调整到统一的大小对机器学习算法至关重要。通常,图像会被调整为相同的高度和宽度,例如28x28或64x64像素。你可以使用OpenCV或Pillow库中的resize()方法来实现。

  2. 颜色转换:将图像转换为灰度或黑白可以简化分析并减少噪声。使用OpenCV中的cvtColor()方法将图像从RGB转换为灰度。对于黑白图像,可以使用阈值化来实现。

  3. 降噪:使用高斯模糊、中值模糊和双边过滤等技术可以减少噪声并平滑图像。OpenCV中的GaussianBlur()medianBlur()bilateralFilter()方法可以实现这些过滤器。

  4. 归一化:将像素值归一化到标准范围,例如0到1或-1到1,有助于算法更好地工作。你可以使用scikit-image中的normalize()方法来实现。

  5. 对比度增强:对于对比度较低的图像,可以使用直方图均衡化来提高对比度。OpenCV中的equalizeHist()方法可以执行此任务。

  6. 边缘检测:在图像中找到边缘或轮廓对于许多计算机视觉任务很有用。OpenCV中的Canny()方法中的Canny边缘检测器是一个常用的选择。

关键是根据项目的需求选择适当的预处理技术。从基本的调整大小开始,然后尝试不同的方法来改进图像质量,最终找到最适合你项目的预处理流程。通过实验,你将找到一个理想的预处理工作流程。

图像预处理常见问题

Python支持图像格式:

Python通过OpenCV和Pillow等库支持的一些主要格式包括:

  • JPEG:常见的有损图像格式
  • PNG:适用于具有透明度的图像的无损图像格式
  • TIFF:适用于高颜色深度图像的无损图像格式
  • BMP:未压缩的光栅图像格式

如何时调整图像大小:

当以下情况时,应该调整图像大小:

  • 图像太大,无法高效处理。减小大小可以加快处理速度。
  • 图像需要匹配机器学习模型的输入大小。
  • 图像需要在特定大小的屏幕或网页上显示。

常用的图像滤波:

一些流行的降噪技术包括:

  • 高斯模糊:使用高斯滤波器模糊图像并减少高频噪声。
  • 中值模糊:用邻近像素的中值替换每个像素。有效去除盐和胡椒噪声。
  • 双边滤波器:在保留边缘的同时模糊图像。它可以在保留锐利边缘的同时去除噪声。

OpenCV支持哪些颜色空间:

OpenCV支持RGB、HSV、LAB和灰度颜色空间。你可以使用cvtColor函数在颜色空间之间转换。例如:

# 将RGB转换为灰度
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)# 将RGB转换为HSV
hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)# 将RGB转换为LAB
lab = cv2.cvtColor(img, cv2.COLOR_RGB2LAB)

转换到不同的颜色空间对于某些计算机视觉任务(如阈值化、边缘检测和对象跟踪)很有用。

相关文章:

Python图像处理——计算机视觉中常用的图像预处理

概述 在计算机视觉项目中,使用样本时经常会遇到图像样本不统一的问题,比如图像质量,并非所有的图像都具有相同的质量水平。在开始训练模型或运行算法之前,通常需要对图像进行预处理,以确保获得最佳的结果。图像预处理…...

编译安装飞桨fastdeploy@FreeBSD(失败)

FastDeploy是一款全场景、易用灵活、极致高效的AI推理部署工具, 支持云边端部署。提供超过 🔥160 Text,Vision, Speech和跨模态模型📦开箱即用的部署体验,并实现🔚端到端的推理性能优化。包括 物…...

java组合总和(力扣Leetcode39)

组合总和 力扣原题链接 问题描述 给定一个无重复元素的整数数组 candidates 和一个目标整数 target,找出 candidates 中可以使数字和为目标数 target 的所有不同组合,并以列表形式返回。你可以按任意顺序返回这些组合。 示例 示例 1: 输…...

ZK友好代数哈希函数安全倡议

1. 引言 前序博客: ZKP中的哈希函数如何选择ZK-friendly 哈希函数?snark/stark-friendly hash函数Anemoi Permutation和Jive Compression模式:高效的ZK友好的哈希函数Tip5:针对Recursive STARK的哈希函数 随着Incrementally Ve…...

VMware vSAN OSA存储策略 - 基于虚拟机的分布式对象存储

简介 博客:https://songxwn.com/ 存储策略 (Storage Policy) 是管理员定义的一组规则,这组规则定义了数据对象在 vSAN 存储上是如何保存的,存储策略定义了数据存储的可靠性、访问性能等特性。vSAN 提供了基于存储策略的存储管理 SPBM (Stor…...

JUC内容概述

复习概念 Sleep和Wait的区别 Sleep是Thread的静态方法,wait是Object的方法,任何对象实例都可以使用sleep不会释放锁,他也不需要占用锁,暂停。wait会释放锁,但是调用他的前提是线程占有锁他们都可以被Interrupted方法…...

postcss安装和使用

要安装和使用 PostCSS,你可以按照以下步骤操作: 步骤一:安装 PostCSS 在项目目录下,通过 npm 初始化一个新的 package.json 文件(如果还没有): npm init -y 安装 PostCSS 和必要的插件&#x…...

macOS 13 Ventura (苹果最新系统) v13.6.6正式版

macOS 13 Ventura是苹果电脑的全新操作系统,它为用户带来了众多引人注目的新功能和改进。该系统加强了FaceTime和视频通话的体验,同时优化了邮件、Safari浏览器和日历等内置应用程序,使其更加流畅、快速和安全。特别值得一提的是,…...

WordPress Git主题 响应式CMS主题模板

分享的是新版本,旧版本少了很多功能,尤其在新版支持自动更新后,该主题可以用来搭建个人博客,素材下载网站,图片站等 主题特点 兼容 IE9、谷歌 Chrome 、火狐 Firefox 等主流浏览器 扁平化的设计加响应式布局&#x…...

安卓国内ip代理app,畅游网络

随着移动互联网的普及和快速发展,安卓手机已经成为我们日常生活和工作中不可或缺的一部分。然而,由于地理位置、网络限制或其他因素,我们有时需要改变或隐藏自己的IP地址。这时,安卓国内IP代理App便成为了一个重要的工具。虎观代理…...

Day53:WEB攻防-XSS跨站SVGPDFFlashMXSSUXSS配合上传文件添加脚本

目录 MXSS UXSS:Universal Cross-Site Scripting HTML&SVG&PDF&SWF-XSS&上传&反编译(有几率碰到) SVG-XSS PDF-XSS Python生成XSS Flash-XSS 知识点: 1、XSS跨站-MXSS&UXSS 2、XSS跨站-SVG制作&配合上传 3、XSS跨站-…...

k8s安装traefik作为ingress

一、先来介绍下Ingress Ingress 这个东西是 1.2 后才出现的,通过 Ingress 用户可以实现使用 nginx 等开源的反向代理负载均衡器实现对外暴露服务,以下详细说一下 Ingress,毕竟 traefik 用的就是 Ingress 使用 Ingress 时一般会有三个组件: …...

如何在Windows 10中打开屏幕键盘?这里有详细步骤

本文解释了在Windows 10中打开或关闭屏幕键盘的不同方法,还解释了如何将屏幕键盘固定到开始菜单。 使用屏幕键盘的快捷键 如果你喜欢快捷方式,你会喜欢这个:按物理键盘上的WinCTRLO。这将立即显示屏幕键盘,而无需通过轻松使用。…...

【Pt】马灯贴图绘制过程 03-制作油渍、积尘效果

目录 效果 一、制作油渍效果 1.1 基本油渍 1.2 流淌的油渍痕迹 二、制作浮尘效果 三、制作积尘效果 效果 一、制作油渍效果 1.1 基本油渍 将上篇制作的“锈迹_深色”和“锈迹_浅色”两个文件夹再次合并为一个文件夹 这里就命名为“锈迹” 添加一个填充图层 设置Base …...

python-numpy-常用函数详解

文章目录 一、函数详解np.empty(num_points)np.zeros(shape, dtypefloat, orderC)np.tile(A, reps)np.newaxisnumpy.stack(arrays, axis0)np.roll(a, shift, axisNone) 二、实例矩阵进行扩展三行,使得每一行都与第一行相同二维数组每行减去不同的数 一、函数详解 n…...

UE小:基于UE5的两种Billboard material(始终朝向相机材质)

本文档展示了两种不同的效果,分别是物体完全朝向相机和物体仅Z轴朝向相机。通过下面的演示和相关代码,您可以更加直观地理解这两种效果的差异和应用场景。 1. 完全朝向相机效果 此效果下,物体将完全面向相机,不论相机在哪个角度…...

spring boot actuator 安全配置 springboot的安全性

关于springboot Actuator框架的安全配置方案: 加入security安全验证框架 方案一: 配置信息: spring:security:user:password: adminname: adminmanagement:endpoints:web:base-path: /monitorexposure:include: "*"# 排除端点e…...

macOS Sonoma如何查看隐藏文件

在使用Git进行项目版本控制时,我们可能会遇到一些隐藏文件,比如.gitkeep文件。它通常出现在Git项目的子目录中,主要作用是确保空目录也可以被跟踪。 终端命令 在尝试查看.gitkeep文件时,使用Terminal命令来显示隐藏文件 default…...

深入浅出:语言模型的原理、实战与评估

深入浅出:语言模型的原理、实战与评估 1. 引言1.1. 关于语言模型1.2. 语言模型的重要性 2. 语言模型简介2.1. 语言模型的类型2.2. 技术演进 3. 语言模型的原理3.1. 概率基础3.2. 深度学习模型 4. 语言模型的实战应用4.1. 数据准备4.2. 模型训练4.3. 应用场景 5. 语言…...

基于ssm的线上旅行信息管理系统论文

摘 要 随着旅游业的迅速发展,传统的旅行信息查询管理方式,已经无法满足用户需求,因此,结合计算机技术的优势和普及,特开发了本线上旅行信息管理系统。 本论文首先对线上旅行信息管理系统进行需求分析,从系…...

Jupyter开启远程服务器(最新版)

Jupyter Notebook 在本地进行访问时比较简单,直接在cmd命令行下输入 jupyter notebook 即可,然而notebook的作用不止于此,还可以用于远程连接服务器,这样如果你有一台服务器内存很大,但是呢你又不喜欢在linux上进行操作…...

【SpringCloud微服务实战10】DevOps自动化部署微服务项目(Jenkins+Docker+K8s)

一、什么是 DevOps DevOps 是一种重视软件开发人员(Developer)和运维人员(Operations)之间沟通与协作的文化、运动或实践,目标在于快速交付高质量的软件产品和服务。DevOps 强调自动化流程、持续集成与交付(CI/CD)、以及通过工具链、敏捷方法论和跨职能团队协作来增强软…...

DSVPN实验报告

一、分析要求 1. 配置R5为ISP,只能进行IP地址配置,所有地址均配为公有IP地址。 - 在R5上,将接口配置为公有IP地址,并确保只进行了IP地址配置。 2. R1和R5之间使用PPP的PAP认证,R5为主认证方;R2于R5之间…...

Linux:Jenkins:参数化版本回滚(6)

上几章我讲到了自动集成和部署 Linux:Jenkins全自动持续集成持续部署(4)-CSDN博客https://blog.csdn.net/w14768855/article/details/136977106 当我们觉得这个页面不行的时候,需要进行版本回滚,回滚方法我这里准备了…...

Haproxy2.8.1+Lua5.1.4部署,haproxy.cfg配置文件详解和演示

目录 一.快速安装lua和haproxy 二.配置haproxy的配置文件 三.配置haproxy的全局日志 四.测试负载均衡、监控和日志效果 五.server常用可选项 1.check 2.weight 3.backup 4.disabled 5.redirect prefix和redir 6.maxconn 六.调度算法 1.静态 2.动态 一.快速安装lu…...

GenICam-GenApi简介

EMVA 1288标准之GemICam-GenApi学习与解读 背景介绍 当前相机不仅用于传输图像,还打包了越来越多的功能。这就导致相机的编程接口越来越复杂。 GenICam的目标是为所有类型的相机提供一个通用的编程接口,无论相机使用何种接口技术,或者实现…...

如何创建纯净版Django项目并启动?——让Django更加简洁

目录 1. Django的基本目录结构 2. 创建APP 2.1 创建app 2.2 配置文件介绍 3. 迁移数据库文件 3.2 连接数据库 3.1 创建迁移文件 3.2 同步数据库 4. 纯净版Django创建 4.1 剔除APP 4.2 剔除中间件 4.3 剔除模板引擎 5. 最终 1. Django的基本目录结构 在我们创建Django项…...

蓝桥杯 2022 省A 选数异或

一种比较无脑暴力点的方法&#xff0c;时间复杂度是(nm)。 (注意的优先级比^高&#xff0c;记得加括号(a[i]^a[j])x&#xff09; #include <iostream> #include <vector> #include <bits/stdc.h> // 包含一些 C 标准库中未包含的特定实现的函数的头文件 usi…...

计数器选型参数,结构原理,工艺与注意问题总结

🏡《总目录》 目录 1,概述2,工作原理2.1,触发器(Flip-Flop):2.2,计数器结构:2.3,计数操作:2.4,模式控制:2.5,扩展与级联:3,结构特点3.1,触发器3.2,加法器3.3,时钟控制电路...

Android 性能优化实例分享-内存优化 兼顾效率与性能

背景 项目上线一段时间后,回顾重要页面 保证更好用户体验及生产效率&#xff0c;做了内存优化和下载导出优化&#xff0c;具体效果如最后的一节的表格所示。 下面针对拍摄流程的两个页面 预览页 导出页优化实例进行介绍&#xff1a; 一.拍摄前预览页面优化 预览效果问题 存在…...