简 介: 在深度学习中需要对图像进行不同的处理。本文对比了基于Numpy以及Paddle.vision.transforms函数中对于图片处理的效果。

关键词图像预处理cv2paddle

#mermaid-svg-C0Z9m8LRLbDRp3GE .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE .label text{fill:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE .node rect,#mermaid-svg-C0Z9m8LRLbDRp3GE .node circle,#mermaid-svg-C0Z9m8LRLbDRp3GE .node ellipse,#mermaid-svg-C0Z9m8LRLbDRp3GE .node polygon,#mermaid-svg-C0Z9m8LRLbDRp3GE .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-C0Z9m8LRLbDRp3GE .node .label{text-align:center;fill:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE .node.clickable{cursor:pointer}#mermaid-svg-C0Z9m8LRLbDRp3GE .arrowheadPath{fill:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-C0Z9m8LRLbDRp3GE .flowchart-link{stroke:#333;fill:none}#mermaid-svg-C0Z9m8LRLbDRp3GE .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-C0Z9m8LRLbDRp3GE .edgeLabel rect{opacity:0.9}#mermaid-svg-C0Z9m8LRLbDRp3GE .edgeLabel span{color:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-C0Z9m8LRLbDRp3GE .cluster text{fill:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-C0Z9m8LRLbDRp3GE .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-C0Z9m8LRLbDRp3GE text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-C0Z9m8LRLbDRp3GE .actor-line{stroke:grey}#mermaid-svg-C0Z9m8LRLbDRp3GE .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE .sequenceNumber{fill:#fff}#mermaid-svg-C0Z9m8LRLbDRp3GE #sequencenumber{fill:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE #crosshead path{fill:#333;stroke:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE .messageText{fill:#333;stroke:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-C0Z9m8LRLbDRp3GE .labelText,#mermaid-svg-C0Z9m8LRLbDRp3GE .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-C0Z9m8LRLbDRp3GE .loopText,#mermaid-svg-C0Z9m8LRLbDRp3GE .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-C0Z9m8LRLbDRp3GE .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-C0Z9m8LRLbDRp3GE .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-C0Z9m8LRLbDRp3GE .noteText,#mermaid-svg-C0Z9m8LRLbDRp3GE .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-C0Z9m8LRLbDRp3GE .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-C0Z9m8LRLbDRp3GE .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-C0Z9m8LRLbDRp3GE .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-C0Z9m8LRLbDRp3GE .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-C0Z9m8LRLbDRp3GE .section{stroke:none;opacity:0.2}#mermaid-svg-C0Z9m8LRLbDRp3GE .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-C0Z9m8LRLbDRp3GE .section2{fill:#fff400}#mermaid-svg-C0Z9m8LRLbDRp3GE .section1,#mermaid-svg-C0Z9m8LRLbDRp3GE .section3{fill:#fff;opacity:0.2}#mermaid-svg-C0Z9m8LRLbDRp3GE .sectionTitle0{fill:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE .sectionTitle1{fill:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE .sectionTitle2{fill:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE .sectionTitle3{fill:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-C0Z9m8LRLbDRp3GE .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-C0Z9m8LRLbDRp3GE .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-C0Z9m8LRLbDRp3GE .grid path{stroke-width:0}#mermaid-svg-C0Z9m8LRLbDRp3GE .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-C0Z9m8LRLbDRp3GE .task{stroke-width:2}#mermaid-svg-C0Z9m8LRLbDRp3GE .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-C0Z9m8LRLbDRp3GE .taskText:not([font-size]){font-size:11px}#mermaid-svg-C0Z9m8LRLbDRp3GE .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-C0Z9m8LRLbDRp3GE .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-C0Z9m8LRLbDRp3GE .task.clickable{cursor:pointer}#mermaid-svg-C0Z9m8LRLbDRp3GE .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-C0Z9m8LRLbDRp3GE .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-C0Z9m8LRLbDRp3GE .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-C0Z9m8LRLbDRp3GE .taskText0,#mermaid-svg-C0Z9m8LRLbDRp3GE .taskText1,#mermaid-svg-C0Z9m8LRLbDRp3GE .taskText2,#mermaid-svg-C0Z9m8LRLbDRp3GE .taskText3{fill:#fff}#mermaid-svg-C0Z9m8LRLbDRp3GE .task0,#mermaid-svg-C0Z9m8LRLbDRp3GE .task1,#mermaid-svg-C0Z9m8LRLbDRp3GE .task2,#mermaid-svg-C0Z9m8LRLbDRp3GE .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-C0Z9m8LRLbDRp3GE .taskTextOutside0,#mermaid-svg-C0Z9m8LRLbDRp3GE .taskTextOutside2{fill:#000}#mermaid-svg-C0Z9m8LRLbDRp3GE .taskTextOutside1,#mermaid-svg-C0Z9m8LRLbDRp3GE .taskTextOutside3{fill:#000}#mermaid-svg-C0Z9m8LRLbDRp3GE .active0,#mermaid-svg-C0Z9m8LRLbDRp3GE .active1,#mermaid-svg-C0Z9m8LRLbDRp3GE .active2,#mermaid-svg-C0Z9m8LRLbDRp3GE .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-C0Z9m8LRLbDRp3GE .activeText0,#mermaid-svg-C0Z9m8LRLbDRp3GE .activeText1,#mermaid-svg-C0Z9m8LRLbDRp3GE .activeText2,#mermaid-svg-C0Z9m8LRLbDRp3GE .activeText3{fill:#000 !important}#mermaid-svg-C0Z9m8LRLbDRp3GE .done0,#mermaid-svg-C0Z9m8LRLbDRp3GE .done1,#mermaid-svg-C0Z9m8LRLbDRp3GE .done2,#mermaid-svg-C0Z9m8LRLbDRp3GE .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-C0Z9m8LRLbDRp3GE .doneText0,#mermaid-svg-C0Z9m8LRLbDRp3GE .doneText1,#mermaid-svg-C0Z9m8LRLbDRp3GE .doneText2,#mermaid-svg-C0Z9m8LRLbDRp3GE .doneText3{fill:#000 !important}#mermaid-svg-C0Z9m8LRLbDRp3GE .crit0,#mermaid-svg-C0Z9m8LRLbDRp3GE .crit1,#mermaid-svg-C0Z9m8LRLbDRp3GE .crit2,#mermaid-svg-C0Z9m8LRLbDRp3GE .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-C0Z9m8LRLbDRp3GE .activeCrit0,#mermaid-svg-C0Z9m8LRLbDRp3GE .activeCrit1,#mermaid-svg-C0Z9m8LRLbDRp3GE .activeCrit2,#mermaid-svg-C0Z9m8LRLbDRp3GE .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-C0Z9m8LRLbDRp3GE .doneCrit0,#mermaid-svg-C0Z9m8LRLbDRp3GE .doneCrit1,#mermaid-svg-C0Z9m8LRLbDRp3GE .doneCrit2,#mermaid-svg-C0Z9m8LRLbDRp3GE .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-C0Z9m8LRLbDRp3GE .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-C0Z9m8LRLbDRp3GE .milestoneText{font-style:italic}#mermaid-svg-C0Z9m8LRLbDRp3GE .doneCritText0,#mermaid-svg-C0Z9m8LRLbDRp3GE .doneCritText1,#mermaid-svg-C0Z9m8LRLbDRp3GE .doneCritText2,#mermaid-svg-C0Z9m8LRLbDRp3GE .doneCritText3{fill:#000 !important}#mermaid-svg-C0Z9m8LRLbDRp3GE .activeCritText0,#mermaid-svg-C0Z9m8LRLbDRp3GE .activeCritText1,#mermaid-svg-C0Z9m8LRLbDRp3GE .activeCritText2,#mermaid-svg-C0Z9m8LRLbDRp3GE .activeCritText3{fill:#000 !important}#mermaid-svg-C0Z9m8LRLbDRp3GE .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-C0Z9m8LRLbDRp3GE g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-C0Z9m8LRLbDRp3GE g.classGroup text .title{font-weight:bolder}#mermaid-svg-C0Z9m8LRLbDRp3GE g.clickable{cursor:pointer}#mermaid-svg-C0Z9m8LRLbDRp3GE g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-C0Z9m8LRLbDRp3GE g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-C0Z9m8LRLbDRp3GE .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-C0Z9m8LRLbDRp3GE .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-C0Z9m8LRLbDRp3GE .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-C0Z9m8LRLbDRp3GE .dashed-line{stroke-dasharray:3}#mermaid-svg-C0Z9m8LRLbDRp3GE #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-C0Z9m8LRLbDRp3GE #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-C0Z9m8LRLbDRp3GE #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-C0Z9m8LRLbDRp3GE #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-C0Z9m8LRLbDRp3GE #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-C0Z9m8LRLbDRp3GE #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-C0Z9m8LRLbDRp3GE #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-C0Z9m8LRLbDRp3GE #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-C0Z9m8LRLbDRp3GE .commit-id,#mermaid-svg-C0Z9m8LRLbDRp3GE .commit-msg,#mermaid-svg-C0Z9m8LRLbDRp3GE .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-C0Z9m8LRLbDRp3GE .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-C0Z9m8LRLbDRp3GE .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-C0Z9m8LRLbDRp3GE g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-C0Z9m8LRLbDRp3GE g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-C0Z9m8LRLbDRp3GE g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-C0Z9m8LRLbDRp3GE g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-C0Z9m8LRLbDRp3GE g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-C0Z9m8LRLbDRp3GE .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-C0Z9m8LRLbDRp3GE .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-C0Z9m8LRLbDRp3GE .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-C0Z9m8LRLbDRp3GE .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-C0Z9m8LRLbDRp3GE .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-C0Z9m8LRLbDRp3GE .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-C0Z9m8LRLbDRp3GE .edgeLabel text{fill:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-C0Z9m8LRLbDRp3GE .node circle.state-start{fill:black;stroke:black}#mermaid-svg-C0Z9m8LRLbDRp3GE .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-C0Z9m8LRLbDRp3GE #statediagram-barbEnd{fill:#9370db}#mermaid-svg-C0Z9m8LRLbDRp3GE .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-C0Z9m8LRLbDRp3GE .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-C0Z9m8LRLbDRp3GE .statediagram-state .divider{stroke:#9370db}#mermaid-svg-C0Z9m8LRLbDRp3GE .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-C0Z9m8LRLbDRp3GE .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-C0Z9m8LRLbDRp3GE .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-C0Z9m8LRLbDRp3GE .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-C0Z9m8LRLbDRp3GE .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-C0Z9m8LRLbDRp3GE .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-C0Z9m8LRLbDRp3GE .note-edge{stroke-dasharray:5}#mermaid-svg-C0Z9m8LRLbDRp3GE .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-C0Z9m8LRLbDRp3GE .error-icon{fill:#522}#mermaid-svg-C0Z9m8LRLbDRp3GE .error-text{fill:#522;stroke:#522}#mermaid-svg-C0Z9m8LRLbDRp3GE .edge-thickness-normal{stroke-width:2px}#mermaid-svg-C0Z9m8LRLbDRp3GE .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-C0Z9m8LRLbDRp3GE .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-C0Z9m8LRLbDRp3GE .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-C0Z9m8LRLbDRp3GE .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-C0Z9m8LRLbDRp3GE .marker{fill:#333}#mermaid-svg-C0Z9m8LRLbDRp3GE .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-C0Z9m8LRLbDRp3GE {color: rgba(0, 0, 0, 0.75);font: ;}

OpenCV方式
目 录
Contents
基本测试
Paddle方式
基本测试
总 结

§01 OpenCV方式


  下面这些内容来自于CSDN中 Paddle2.0之图像增广 中介绍的方式,通过测试,为之后的应用积累经验。

1.1 基本测试

  测试的图片来自于 火星好奇号 的照片。

▲ 图1.1.1 Mars Curiosity返回的照片

  下面的试验是在 PaddlePaddle中的AI Studio的 BML CodeLab。上载测试文件,到 /home/aistudio/data/中。

1.1.1 读入图片

  下面是使用CV2打开一个图片的基本方法。

import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *
import cv2picfile = '/home/aistudio/data/211219204357.JPG'img = cv2.imread(picfile)plt.figure(figsize=(10,10))
plt.imshow(img)
plt.show()

  使用cv2.imread()读入图片后石红plt.imshow现实的图片:

▲ 图1.1.2 使用cv2.imread()读入图片后石红plt.imshow现实的图片

  可以看到图片的颜色出现的变化。这是由于cv2的缺省读入的时候,它的颜色层是按照“BGR”的顺序,而不是按照plt.imshow()所需要的"RGB的顺序。

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

  经过cvColor(img, cv2.COLOR_BGR2RGB)处理之后的图片:

▲ 图1.1.3 经过cvColor(img, cv2.COLOR_BGR2RGB)处理之后的图片

  显示图片数据。

print(type(img), shape(img))

<class 'numpy.ndarray'>
(653, 1040, 3)

1.1.2 图片缩放

  使用cv2.resize()将图片尺寸进行变换:

print(type(img), shape(img))img1 = cv2.resize(img, (64,64))
plt.figure(figsize=(10,10))
plt.imshow(img1)

  使用cv2.resize()处理成64×64的分辨率:

▲ 图1.1.4 使用cv2.resize()处理成64×64的分辨率

  重新将图片resize成(512,512):

img2 = cv2.resize(img1, (512,512))
plt.figure(figsize=(10,10))
plt.imshow(img2)

  重新resize成(512×512):

▲ 图1.1.5 重新resize成(512×512)

print(type(img), shape(img))

  img的数据类型和结构:

<class 'numpy.ndarray'>
(64, 64, 3)

1.1.3 图片翻转

print(type(img), shape(img))
img1 = flip(img)
plt.figure(figsize=(10,10))
plt.imshow(img1)

<class 'numpy.ndarray'>
(653, 1040, 3)

  直接在(H,W,3)的基础上使用flip产生的效果:

▲ 图1.1.6 直接在(H,W,3)的基础上使用flip产生的效果

(1)左右翻转

img1 = flip(img, 1)
plt.figure(figsize=(10,10))
plt.imshow(img1)

  左右翻转:flip(img,1):

▲ 图1.1.7 左右翻转:flip(img,1)

(2)上下翻转

img1 = flip(img, 0)
plt.figure(figsize=(10,10))
plt.imshow(img1)

  上下翻转:flip(img,0):

▲ 图1.1.8 上下翻转:flip(img,0)

(3)颜色反转

img1 = flip(img, 2)
plt.figure(figsize=(10,10))
plt.imshow(img1)

  颜色反转:flip(img,2):

▲ 图1.1.9 颜色反转:flip(img,2)

1.1.4 图片旋转

rows,cols,h = img.shape
M = cv2.getRotationMatrix2D(((cols-1)/2.0, (rows-1)/2.0), 40, 0.7)
img1 = cv2.warpAffine(img, M, (cols, rows))
plt.figure(figsize=(10,10))
plt.imshow(img1)

  图片旋转:

▲ 图1.1.10 图片旋转

1.1.5 亮度调整

rows,cols,channels = img.shape
img1 = cv2.addWeighted(img, 0.6, zeros([rows,cols,channels],img.dtype), 0.6, 0.6)
plt.figure(figsize=(10,10))
plt.imshow(img1)

  亮度调整:

▲ 图1.1.11 亮度调整

§02 Paddle方式


  相关资料参见: paddle.vision

2.1 基本测试

2.1.1 Resize

from paddle.vision.transforms import Resize,ColorJitter,CenterCrop,rotateimg1 = Resize((32,32))(img)
plt.figure(figsize=(10,10))
plt.imshow(img1)

  Resize((32,32))(img)处理后的结果:

▲ 图2.1.1 Resize((32,32))(img)处理后的结果

2.1.2 图像旋转

from paddle.vision.transforms import Resize,ColorJitter,CenterCrop,rotateimg1 = rotate(img, 45)
plt.figure(figsize=(10,10))
plt.imshow(img1)

  rotate(img, 45)处理后的结果:

▲ 图2.1.2 rotate(img, 45)处理后的结果

2.1.3 转换成灰度图

from paddle.vision.transforms import Resize,ColorJitter,CenterCrop,rotate,to_grayscale
from PIL                    import Image
img1 = Image.fromarray(img)img1 = to_grayscale(img1)
plt.figure(figsize=(10,10))
plt.imshow(img1)

  请注意到其中使用到了 PIL中的Image函数。

▲ 图2.1.3 to_grayscale处理后的图像

  注意: PIL Image与numpy的array之间的转换:

(1)Image

Image.fromarray(data)

(2)array

mumpy.array(Image)

2.1.4 亮度调整

from paddle.vision.transforms import adjust_brightnessimg1 = adjust_brightness(Image.fromarray(img), 0.5)
plt.figure(figsize=(10,10))
plt.imshow(img1)

  adjust_brightness(img,0.5)::处理结果:

▲ 图2.1.4 adjust_brightness(img,0.5)::处理结果

from paddle.vision.transforms import adjust_brightness
import tqdmgifpath = '/home/aistudio/GIF'
filedim = os.listdir(gifpath)
for f in filedim:fn = os.path.join(gifpath, f)if os.path.isfile(fn):os.remove(fn)count = 0
for r in tqdm.tqdm(linspace(0, 1.0, 20)):img1 = adjust_brightness(Image.fromarray(img), 0.5)count += 1savefile = os.path.join(gifpath, '%02d.jpg'%count)plt.figure(figsize=(10,10))plt.imshow(img1)plt.savefig(savefile)

▲ 图2.1.6 亮度变化

2.1.5 对比度变化

from paddle.vision.transforms import adjust_brightness,adjust_contrast
import tqdmcount = 0
for r in tqdm.tqdm(linspace(0, 2.0, 100)):img1 = adjust_contrast(Image.fromarray(img), r)count += 1savefile = os.path.join(gifpath, '%02d.jpg'%count)plt.figure(figsize=(10,10))plt.imshow(img1)plt.savefig(savefile)

▲ 图2.1.6 对比度的变化

2.1.6 调节色调

  参考文档: adjust_hue

▲ 图2.1.7 色调变化

import tqdmgifpath = '/home/aistudio/GIF'
filedim = os.listdir(gifpath)
for f in filedim:fn = os.path.join(gifpath, f)if os.path.isfile(fn):os.remove(fn)from paddle.vision.transforms import adjust_brightness,adjust_contrast,adjust_hue
count = 0
for r in tqdm.tqdm(linspace(0.5,0.5,100)):img1 = adjust_hue(Image.fromarray(img), r)count += 1savefile = os.path.join(gifpath, '%02d.jpg'%count)plt.figure(figsize=(10,6))plt.imshow(img1)plt.savefig(savefile)

2.1.7 中心剪切

import tqdmgifpath = '/home/aistudio/GIF'
filedim = os.listdir(gifpath)
for f in filedim:fn = os.path.join(gifpath, f)if os.path.isfile(fn):os.remove(fn)from paddle.vision.transforms import adjust_brightness,adjust_contrast,adjust_hue
from paddle.vision.transforms import center_cropcount = 0
for r in tqdm.tqdm(range(20, 500, 5)):img1 = center_crop(Image.fromarray(img), r)count += 1savefile = os.path.join(gifpath, '%02d.jpg'%count)plt.figure(figsize=(10,6))plt.imshow(img1)plt.savefig(savefile)

▲ 图2.1.8 中心剪切

2.1.8 ColorJetter

▲ 图2.1.9 ColorJitter

from paddle.vision.transforms import adjust_brightness,adjust_contrast,adjust_hue
from paddle.vision.transforms import center_crop, ColorJittercount = 0
for r in tqdm.tqdm(range(80)):img1 = ColorJitter(0.5,0.5,0.5,0.5)(Image.fromarray(img))count += 1savefile = os.path.join(gifpath, '%02d.jpg'%count)plt.figure(figsize=(10,6))plt.imshow(img1)plt.savefig(savefile)

2.1.9 RandomCrop

▲ 图2.1.10 RandomCrop

§03 总  结


  在深度学习中需要对图像进行不同的处理。本文对比了基于Numpy以及Paddle.vision.transforms函数中对于图片处理的效果。


■ 相关文献链接:

  • Paddle2.0之图像增广
  • 火星好奇号
  • paddle.vision
  • adjust_hue

● 相关图表链接:

  • 图1.1.1 Mars Curiosity返回的照片
  • 图1.1.2 使用cv2.imread()读入图片后石红plt.imshow现实的图片
  • 图1.1.3 经过cvColor(img, cv2.COLOR_BGR2RGB)处理之后的图片
  • 图1.1.4 使用cv2.resize()处理成64×64的分辨率
  • 图1.1.5 重新resize成(512×512)
  • 图1.1.6 直接在(H,W,3)的基础上使用flip产生的效果
  • 图1.1.7 左右翻转:flip(img,1)
  • 图1.1.8 上下翻转:flip(img,0)
  • 图1.1.9 颜色反转:flip(img,2)
  • 图1.1.10 图片旋转
  • 图1.1.11 亮度调整
  • 图2.1.1 Resize((32,32))(img)处理后的结果
  • 图2.1.2 rotate(img, 45)处理后的结果
  • 图2.1.3 to_grayscale处理后的图像
  • 图2.1.4 adjust_brightness(img,0.5)::处理结果
  • 图2.1.6 亮度变化
  • 图2.1.6 对比度的变化
  • 图2.1.7 色调变化
  • 图2.1.8 中心剪切
  • 图2.1.9 ColorJitter
  • 图2.1.10 RandomCrop

深度学习中图片数据增强方法相关推荐

  1. [综述类] 一文道尽深度学习中的数据增强方法(上)

    今天带来一次有关于深度学习中的数据增强方法的分享. 00 什么是数据增强 在深度学习项目中,寻找数据花费了相当多的时间.但在很多实际的项目中,我们难以找到充足的数据来完成任务. 为了要保证完美地完成项 ...

  2. 【技术综述】深度学习中的数据增强方法都有哪些?

    很多实际的项目,我们都难以有充足的数据来完成任务,要保证完美的完成任务,有两件事情需要做好:(1)寻找更多的数据.(2)充分利用已有的数据进行数据增强,今天就来说说数据增强. 作者 | 言有三 编辑 ...

  3. 深度学习中的数据增强方法

    对于较深层次的深度神经网络,其性能会随着训练数据的提升而进一步提升. 目前深度学习方法广泛采用的数据增强方法,主要有: multi-scale:多尺度: translate:平移,[-6, -6],左 ...

  4. 【技术综述】深度学习中的数据增强(下)

    文章首发于微信公众号<有三AI> [技术综述]深度学习中的数据增强(下) 今天带来深度学习中的数据增强方法的下篇.我们将从以下几个方向入手.1,介绍一下什么是无监督的数据增强方法.2,简单 ...

  5. gan 总结 数据增强_深度学习中的数据增强(下)

    言有三 毕业于中国科学院,计算机视觉方向从业者,有三工作室等创始人 编辑 | 言有三 今天带来深度学习中的数据增强方法的下篇.我们将从以下几个方向入手.1,介绍一下什么是无监督的数据增强方法.2,简单 ...

  6. 深度学习中的数据增强(上)

    feic非[技术综述] 深度学习中的数据增强(上) - 知乎 https://zhuanlan.zhihu.com/p/38345420 [技术综述]深度学习中的数据增强(下) - 知乎 https: ...

  7. 总结 62 种在深度学习中的数据增强方式

    数据增强 数据增强通常是依赖从现有数据生成新的数据样本来人为地增加数据量的过程 这包括对数据进行不同方向的扰动处理 或使用深度学习模型在原始数据的潜在空间(latent space)中生成新数据点从而 ...

  8. 深度学习中常用数据预处理方法

    数据归一化处理,比较简单公式为 (x-min)/(max-min),主要目的是将数据的范围缩小至0-1之间,因而对数据绝对值的大小不敏感 2.数据标准化处理,也比较简单,公式为(x-avg)/sigm ...

  9. 如何系统性掌握深度学习中的数据使用

    数据是深度学习系统的输入,对深度学习的发展起着至关重要的作用,但是又容易被很多人忽视,尤其是缺少实战的理论派. 今天便来谈谈这个问题,同时介绍一个好的学习社区供大家讨论与提升. 文/编辑 | 言有三 ...

最新文章

  1. 如何模拟将CPU、IO打满?
  2. Python 网络爬虫 001 (科普) 网络爬虫简介
  3. ML 徒手系列 最大似然估计
  4. 计算机比赛的评分办法,汉字录入比赛评分规则方案
  5. android-铃声的设置与播放
  6. 如何在js中使用ajax请求数据,在 JS 中怎么使用 Ajax 来进行请求
  7. html if语句多条件,nginx if多条件判断的实现
  8. 用记事本编写一个Servlet项目
  9. C#-反射知识点(转载)
  10. kali 安装volatility_Linux下内存取证工具Volatility的使用
  11. matlab 单位脉冲响应,滤波器系数、单位脉冲响应、频率响应等概念笔记
  12. 二层板的射频RF信号如何控阻抗 四层板的射频RF信号如何控阻抗  射频信号是否可以不控阻抗,射频差分需要控阻抗吗?为什么射频信号需要挖空隔层参考?射频信号为什么要加粗?
  13. 更换VS2015——>VS2019
  14. python list[list] or list[list, list, list]
  15. Java飞机大战游戏(需求分析+代码+图片)
  16. Python可变/不可变对象
  17. 国内3DGIS平台汇总2013版本
  18. 【无标题】ssh工具下载地址
  19. AD网表转换ALLEGO步骤详解(可私信问题解决)
  20. 微信电脑版为啥必须扫码登录?这一招太狠了

热门文章

  1. Spring Batch 基本的批处理指导原则
  2. 操作系统 地址 概念
  3. 删除Referencing outlet
  4. VMware试验问题总结
  5. Delphi - 我的代码之窗体移动
  6. FreeTextBox 3.1.6 的实践总结
  7. CeSharp支持MP4
  8. 这样玩《TmoLand》包你收益最大化
  9. 简述mysql半同步复制—semisync
  10. linux 用户和权限管理