paddlepaddle_文件操作_畫圖操作_圖片基本處理

Attention:

學習注重的就是持之以恆,如果只是靠着瞭解新東西的新鮮度學習,那麼便不會持久,更不會學到真正的知識。

好的,本blog在於分享一些基礎的知識,並不進行深入的講解。在這裏只是給介紹一些,大家會一次又一次遇到的問題,同時介紹一下python必須會用到的小工具。

1、查找特定文件

關於文件的操作一般都需要導入OS模塊

import os

如果你想要查詢的文件,在目錄“find_file_path",那麼便將這個目錄付給變量path

path = “find_file_path"

Q: so why?

A: 1、減少編寫的代碼的長度,同時增加代碼的可閱讀性。

​ eg:在編寫代碼的後面會多次且重複的使用到這個目錄,如果將其值賦給path,可大大的節約 代碼量,同時更重要的還有如下:

​ 2、將目錄信息賦給path,其中一個原因便是爲了增加代碼的可重用性,

​ eg:如果下次你想查找文件"find_file_A_path",那麼便可以直接更改path的值,而不用一個一個 的全部修改

將帶查找的名稱,也賦值給一個變量

filename = "target_file"

前置知識儲備:

獲取path文件下的所有子文件,並存儲到files中。

files = os.listdir(path)

eg: 如下圖所示,獲取"prac"文件下的所有子文件。如圖紅線框中所示:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-oOVCcIQT-1588575019729)(C:\Users\kingdom\AppData\Roaming\Typora\typora-user-images\image-20200504104219956.png)]

輸出:

['items.py', 'middlewares.py', 'pipelines.py', 'settings.py', 'spiders', '__init__.py', '__pycache__']

之後循環每個"path",下的所有子文件。

1、如果存在文件夾,重複上述操作,

2、如果存在文件,觀察文件是否符合要求,符合要求則存儲,不符合則continue

全部代碼如下圖所示:

def findfiles(path):
    files = os.listdir(path)
    for f in files:
        f_path = os.path.join(path,f)
        if os.path.isdir(f_path):
            findfiles(f_path)
        if filename in f:
            result.append(os.path.join(path,f))
            print("第{}個數據爲 : {}".format(len(result),f_path))

同時,也存在另一個方法,os.walk,如果想具體瞭解,可以進行點擊訪問,進行學習

全部代碼如下:

def findfiles_(path):
    #在這裏寫下您的查找文件代碼吧!

    for root,dirs,files in os.walk(path):
        for f in files:
            if filename in f:
                result.append(os.path.join(root,f))
                print(len(result),'\t',os.path.join(root,f))

最終可以在main函數中進行調用

if __name__ == '__main__':
    findfiles(path)
    print()
    result = []
    findfiles_(path)

2、圖片的數據處理

Q: 我們人類可以通過直接看圖片,瞭解圖片需要表達的信息,那計算機呢?

A: 計算機不能直接讀取,我們需要將圖片轉化爲數據,具體如下所示:

提前知道:

我們假設本文件夾下有一個"img.png"圖片,大小爲255*255."prac.py"是我們編寫的程序文件。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZQ0DjRlo-1588575019733)(C:\Users\kingdom\AppData\Roaming\Typora\typora-user-images\image-20200504110207098.png)]

本程序需要用到python中一個不得不學的模塊cv2,如想深入瞭解,請務必點擊進行深入學習

imoprt cv2
  • 首先讀入圖片文件

    license_plate = cv2.imread('./img.png')
    

    ! Attention:

    cv2.imread() 接口讀取圖像,讀進來的直接是rgb格式,且數據都在0-255

  • 轉化爲灰度圖

    gray_plate = cv2.cvtCOlor(license_plate,cv2.COLOR_RGB2GRAY)
    

    cv2.COLOR_RGB2GRAY-----------color_rgb2gray------->rgb two(to) gray

    如需詳細請點擊瞭解cv2.cvtCOlor()

  • 圖像閾值處理

    ret, binary_plate = cv2.threshold(gray_plate, 175, 255, cv2.THRESH_BINARY)
    

    像素高於閾值時,給像素賦予新值。即濾除過大或者過小的元素。常用於從灰度圖中獲取二進制圖像,同時也可以用於消除噪音。

  • 歸一下處理

    result = []
    for col in range(binary_plate.shape[1]):
        result.append(0)
        for row in range(binary_plate.shape[0]):
            result[col] = result[col] + binary_plate[row][col]/255
    

3、畫圖

matplotlib模塊是,程序員必須要掌握的,計算機中各種運算過程都是"封閉"的,當然封閉這個詞說的有點不太準確,但是可以表達運算的未知性。爲了瞭解模型的好壞,出現問題的大致位置,梯度下降的過程,過擬合、欠擬合的具體發生時機,我們都需要可視化!將其一步步的運行結果畫成圖表,媽媽便再也不用擔心我的調優啦。

好吧,言歸正傳。

  • 導入各種模塊:

    import matplotlib.pyplot as plt
    import numpy as np 
    import json
    import matplotlib.font_manager as font_manager
    import pandas as pd
    
  • 讀取數據:

    df = pd.read_json('data/20510522.json')
    
    zone_list = s.index
    count_list = s.values
    
  • 設置畫圖的各種小細節,如字體大小等

    # 設置顯示中文
    plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認字體
    
    plt.figure(figsize=(20,15))
    
    plt.bar(range(len(count_list)), count_list,color='r',tick_label=zone_list,facecolor='#9999ff',edgecolor='white')
    
    # 這裏是調節橫座標的傾斜度,rotation是度數,以及設置刻度字體大小
    plt.xticks(rotation=45,fontsize=20)
    plt.yticks(fontsize=20)
    
    plt.legend()
    plt.title('''This is Title''',fontsize = 20)
    plt.savefig('work/result/bar_result02.jpg')#圖像的保存位置
    plt.show()
    

可運行代碼如下所示:

import matplotlib.pyplot as plt
import numpy as np 
import json
import matplotlib.font_manager as font_manager
import pandas as pd

#顯示matplotlib生成的圖形
%matplotlib inline


df = pd.read_json('data/data31557/20200422.json')
#print(df)

grouped=df['name'].groupby(df['zone'])
s = grouped.count()

zone_list = s.index
count_list = s.values
# print(zone_list)
# print(count_list)

# 設置顯示中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認字體

plt.figure(figsize=(20,15))

plt.bar(range(len(count_list)), count_list,color='r',tick_label=zone_list,facecolor='#9999ff',edgecolor='white')

# 這裏是調節橫座標的傾斜度,rotation是度數,以及設置刻度字體大小
plt.xticks(rotation=45,fontsize=20)
plt.yticks(fontsize=20)

plt.legend()
plt.title('''This is Title''',fontsize = 20)
plt.savefig('/home/aistudio/work/result/bar_result02.jpg')
plt.show()

ps:沒有數據還是運行不出來的。如果想試一下的話,數據點擊網站獲取:

提取碼:9ehv 

同時python還有另一個強大無與倫比的庫pyecharts,用這個方法畫出來的圖超級專業的給你講,話不多說,上圖!

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

如果有想仔細瞭解的同學,除了訪問官方API還可以點擊網站進行進一步學習

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章