Python處理圖像五個有趣場景,很實用!

2022-01-02 小詹學Python

Python像是叮噹貓的口袋,幾乎什麼都能做,適合外行小白們去摸索學習,能極大的增加對編程的興趣。

有些工具用python來實現不一定是技術上的最優選擇,但可能是最簡潔、最面向大眾的。

介紹幾個不錯的處理圖像的案例,並附上代碼,儘可能讓大家能拿來就用。

1、生成手繪圖片

現在很多軟體可以將照片轉換成手繪形式,python也可以實現,而且定製化更強,可批量轉換。

這裡用到pillow庫,這是非常牛逼且專業的Python圖像處理庫

原圖:

生成手繪後:

代碼:

# -*- coding: UTF-8 -*-
from PIL import Image
import numpy as np

# 原始圖片路徑
original_image_path = "E:\\圖片\\陸家嘴.jpg"
# 要生成的手繪圖片路徑,可自定義
handdrawn_image_path = "E:\\圖片\\陸家嘴-手繪.jpg"

# 加載原圖,將圖像轉化為數組數據
a=np.asarray(Image.open(original_image_path).convert('L')).astype('float')
depth=10.

#取圖像灰度的梯度值
grad=np.gradient(a)

#取橫縱圖像梯度值
grad_x,grad_y=grad
grad_x=grad_x*depth/100.
grad_y=grad_y*depth/100.
A=np.sqrt(grad_x**2+grad_y**2+1.)
uni_x=grad_x/A
uni_y=grad_y/A
uni_z=1./A

#光源的俯視角度轉化為弧度值
vec_el=np.pi/2.2

#光源的方位角度轉化為弧度值
vec_az=np.pi/4.

#光源對x軸的影響
dx=np.cos(vec_el)*np.cos(vec_az)
dy=np.cos(vec_el)*np.sin(vec_az)
dz=np.sin(vec_el)

#光源歸一化,把梯度轉化為灰度
b=255*(dx*uni_x+dy*uni_y+dz*uni_z)

#避免數據越界,將生成的灰度值裁剪至0-255內
b=b.clip(0,255)

#圖像重構
im=Image.fromarray(b.astype('uint8'))

print('完成')
im.save(handdrawn_image_path)

這裡可以做成批量處理的轉手繪腳本,大家試試。

2、生成證件照

這裡用到pillow和removebg,分別用於修改照片尺寸和摳圖。

這裡removebg用到了AI技術,摳圖邊緣很柔和,效果挺不錯的。

代碼:

# encoding=utf-8
from PIL import Image
from removebg import RemoveBg

# removebg涉及到api_key,需要到其官網申請
api_key = 'PysKLJueeoyK9NbJXXXXXXXXX'

def change_bgcolor(file_in, file_out, api_key, color):
  '''
      #必須為png格式
  '''
  p, s = file_in.split(".")
  rmbg = RemoveBg(api_key, 'error.log')
  rmbg.remove_background_from_img_file(file_in)
  file_no_bg = "{}.{}_no_bg.{}".format(p, s, s)
  no_bg_image = Image.open(file_no_bg)
  x, y = no_bg_image.size
  new_image = Image.new('RGBA', no_bg_image.size, color=color)
  new_image.paste(no_bg_image, (0, 0, x, y), no_bg_image)
  new_image.save(file_out)


# 修改照片尺寸
def change_size(file_in, file_out, width, height):
  image = Image.open(file_in)
  resized_image = image.resize((width, height), Image.ANTIALIAS)
  resized_image.save(file_out)


if __name__ == "__main__":
  file_in = 'E:\\girl.png'
  file_out = 'E:\\girl_cutout.png'
  # 尺寸可按需求自修改
  # change_size(file_in, file_out, width, height)
  
  # 換背景色
  color = (0, 125, 255)
  change_bgcolor(file_in, file_out, api_key, color)
  

3、生成藝術二維碼

現在有不少二維碼生成工具,python也有一款二維碼生成庫-myqr,可以給二維碼加上圖片背景,看起來很炫,效果如下

使用pip安裝myqr,非常簡單。

該庫可以在命令行中運行,你只需要傳遞網址連結、圖片地址等參數,就可以生成相應的二維碼,二維碼圖片默認保存在當前目錄下面。

命令行輸入格式:

myqr 網址連結

比如:

myqr https://zhuanlan.zhihu.com/pydatalysis

再按enter鍵執行,就能生成對應連結的二維碼了。

怎麼融合圖片呢?很簡單,傳入圖片地址參數'-p'

比如說我d盤有一張海綿寶寶的圖片,地址是:d:\hmbb.jpg即傳入參數'-pd:\hmbb.jpg'在命令行鍵入:

myqr https://zhuanlan.zhihu.com/pydatalysis -p d:\hmbb.jpg -c

執行就能生成上圖的海綿寶寶主題二維碼了。

4、生成詞雲圖

詞雲圖一般用來凸顯文本關鍵詞,產生視覺上的焦點,利用好詞雲會讓數據更加有說服力。

python也有專門製作詞雲的庫-wordcloud,能自定義顏色和形狀。

比如我用小丑的豆瓣評論做成一張詞雲圖。

作詞雲圖,首先要對收集文本,然後對文本做分詞處理,最後生成詞雲。

這裡不對前兩步做詳細解析,只給出詞雲代碼:

def wordCloudImage(wordlist,width,height,bgcolor,savepath):
    # 可以打開你喜歡的詞雲展現背景圖
    # cloud_mask = np.array(Image.open('nezha.png'))
    # 定義詞雲的一些屬性
    wc = WordCloud(
        width=width,  # 圖幅寬度 900
        height=height,  # 圖幅高度 3000
        background_color=bgcolor,  # 背景圖分割顏色為白色 "black"
        # mask=cloud_mask,  # 背景圖樣
        max_words=300,  # 顯示最大詞數
        font_path='./fonts/simhei.ttf',  # 顯示中文
        collocations=False,
        # min_font_size=5,  # 最小尺寸
        # max_font_size=100,  # 最大尺寸
    )

    # wordfile是分詞後的詞彙列表
    x = wc.generate(wordlist)
    # 生成詞雲圖片
    image = x.to_image()
    # 展示詞雲圖片
    image.show()
    # savepath是圖片保存地址,保存詞雲圖片
    wc.to_file(savepath)

5、生成微信九宮格圖片

有段時間朋友圈比較流行九宮格圖片,就是一張圖分割成九張圖,看著似乎很文藝。

這個可以用很多軟體來做,python當然也能實現,只需不到50行代碼。

代碼:

# 朋友圈九宮格圖片製作
# encoding=utf-8
from PIL import Image
import sys


# 先將input image 填充為正方形
def fill_image(image):
    width, height = image.size
    # 選取原圖片長、寬中較大值作為新圖片的九宮格半徑
    new_image_length = width if width > height else height
    # 生產新圖片【白底】
    new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white')
    # 將原圖粘貼在新圖上,位置為居中
    if width > height:
        new_image.paste(image, (0, int((new_image_length - height) / 2)))
    else:
        new_image.paste(image, (int((new_image_length - width) / 2), 0))
    return new_image


# 將圖片切割成九宮格
def cut_image(image):
    width, height = image.size
    # 一行放3張圖
    item_width = int(width / 3)
    box_list = []
    for i in range(0, 3):
        for j in range(0, 3):
            box = (j * item_width, i * item_width, (j + 1) * item_width, (i + 1) * item_width)
            box_list.append(box)
    image_list = [image.crop(box) for box in box_list]
    return image_list


# 保存圖片
def save_images(image_list):
    index = 1
    for image in image_list:
        image.save('e:\\圖片\\'+str(index) + '.png', 'PNG')
        index += 1


if __name__ == '__main__':
    file_path = "e:\\圖片\\龍貓.jpg"
    image = Image.open(file_path)
    # image.show()
    image = fill_image(image)
    image_list = cut_image(image)
    print(len(image_list))
    save_images(image_list)

python還可以做很多有趣的圖像處理,大家可以玩起來!

相關焦點

  • 10個Python圖像處理工具,非常全了!
    點擊上方「AI公園」,關注公眾號,選擇加「星標「或「置頂」作者:Parul Pandey編譯:ronghuaiyang10個常用的可以進行圖像處理的
  • 使用Python圖像處理庫Pillow處理圖像文件
    本案例使用圖像處理庫Pillow中的模塊、對象來處理圖像:實現讀取圖像、獲取圖像信息、調整圖像大小、旋轉圖像、平滑圖像、剪切圖像等基本圖像處理任務。CS2.1 安裝PillowPillow是Python中的圖像處理庫(PIL:Python Image Library),提供了了廣泛的文件格式支持,強大的圖像處理能力,主要包括圖像儲存、圖像顯示、格式轉換以及基本的圖像處理操作等。
  • 十個Python圖像處理工具
    今天的世界充滿了數據,圖像是這些數據的重要組成部分。但是,在使用它們之前,必須對這些數字圖像進行處理 - 分析和操作,以提高其質量或提取一些可以使用的信息。常見的圖像處理任務包括顯示; 基本操作如裁剪,翻轉,旋轉等;;圖像分割,分類和特徵提取;圖像恢復;圖像識別。
  • 10個不得不知的Python圖像處理工具,非常全了!
    介紹我們這個世界充滿了數據,而圖像是這些數據的重要組成部分。然而,要想使用這些圖像,需要對它們進行處理。因此,圖像處理是分析和處理數字圖像的必要的過程,其主要目的是提高圖像質量或從中提取一些信息,然後加以利用。圖像處理中常見的任務包括圖像顯示、裁剪、翻轉、旋轉等基本操作、圖像分割、分類和特徵提取、圖像恢復和圖像識別。
  • 常用的十大 python 圖像處理工具
    但無論是用於何種用途,這些圖像都需要進行處理。圖像處理就是分析和處理數字圖像的過程,主要旨在提高其質量或從中提取一些信息,然後可以將其用於某種用途。圖像處理中的常見任務包括顯示圖像,基本操作如裁剪、翻轉、旋轉等,圖像分割,分類和特徵提取,圖像恢復和圖像識別。
  • Python中的十大圖像處理工具
    圖像處理是分析和操縱數字圖像的過程,旨在提高其質量或從中提取一些信息,然後將其用於某些方面。圖像處理中的常見任務包括顯示圖像,基本操作(如裁剪、翻轉、旋轉等),圖像分割,分類和特徵提取,圖像恢復和圖像識別等。 Python之成為圖像處理任務的最佳選擇,是因為這一科學程式語言日益普及,並且其自身免費提供許多最先進的圖像處理工具。
  • 整理 Python 中的圖像處理利器(共10個)
    當今世界充滿了各種數據,而圖像是其中高的重要組成部分。然而,若想其有所應用,我們需要對這些圖像進行處理。圖像處理是分析和操縱數字圖像的過程,旨在提高其質量或從中提取一些信息,然後將其用於某些方面。圖像處理中的常見任務包括顯示圖像,基本操作(如裁剪、翻轉、旋轉等),圖像分割,分類和特徵提取,圖像恢復和圖像識別等。
  • Python+OpenCV的基礎圖像處理操作匯總
    圖像處理是對圖像進行的技術操作與分析,比如為了得到增強的圖像或提取一些有用的信息而進行的一系列操作。隨著我們的發展,許多應用程式使用圖像/幀/視頻作為輸入,對它們進行預處理,並將其輸入到設備或軟體或腳本中。圖像處理也可以是娛樂性的,可以用於許多應用。
  • opencv-python快速入門篇【數字圖像處理系列一】
    >本系列使用的開發環境是jupyter notebook,是一個python的交互式開發環境,測試十分方便,併集成了vim操作,安裝教程可參考:https://blog.csdn.net/feilong_csdn/article/details/80186276本文我們將一起學習使用opencv-python對數字圖像進行簡單的處理,快速理解數字圖像的原理,主要介紹opencv-python
  • Python 圖像處理 OpenCV (1):入門
    引言又開一個新的系列分享,對圖像處理感興趣的同學可以關注這個系列。更新頻率儘量保持一周兩到三次推送。
  • python圖像處理-添加文字
    python圖像處理-1python圖像處理-批量生成純色圖片歡迎關注:葉子陪你玩編程分享自己的python學習之路
  • 圖像分類:一個更魯棒的場景分類模型
    如何根據圖像的視覺內容為圖像賦予一個語義類別(例如,教室、街道等)是圖像場景分類的目標,也是圖像檢索、圖像內容分析和目標識別等問題的基礎。但由於圖片的尺度、角度、光照等因素的多樣性以及場景定義的複雜性,場景分類一直是計算機視覺中的一個挑戰性問題。本次任務從400萬張網際網路圖片中精選出8萬張圖片,分屬於80個日常場景類別,例如航站樓、足球場等。每個場景類別包含600-1100張圖片。
  • 2021年用於圖像處理的Python頂級庫
    除此之外,它還有助於人臉檢測、圖像分割、特徵提取、目標檢測、三維重建等。有關更多信息,請查看官方文檔:https://opencv.org/Scikit-ImageScikit Image是另一個偉大的開源圖像處理庫。它幾乎適用於任何計算機視覺任務。它是最簡單、最直接的庫之一。這個庫的某些部分是用Cython編寫的(它是python程式語言的超集,旨在使python比C語言更快)。
  • 【數字圖像處理系列五】圖像濾波之空間濾波:圖像平滑降噪和圖像銳化
    python版本:python3.5.4 ; opencv-python版本:opencv-python3.4.2.17使用的開發環境是
  • 驗證碼識別實例,python簡單圖像處理和實現
    我的觀察沒錯,圖像尺寸為45x180,每個字符分配30個像素的空間來適配,從而使它們間隔比較均勻。因此,取得了驗證碼識別路上的第一步,結果:把圖像裁剪成6個不同的部分,每個部分的寬度為30像素。python圖像裁剪我們璇兒Python作為原型語言,因為它的庫最容易使用和部署。經過簡單搜索,我找到了PIL庫。還用到了Image模塊,用來操作圖像進行字符裁剪並將圖像作為加載為數字矩陣。
  • Python十大工具,讓圖像簡潔直觀有魅力!
    因此,圖像處理就是對數字圖像進行分析、操作的過程,其主要目的是為改善圖像質量或從中提取一些有用信息。圖像處理的常見任務包括圖像顯示、圖像基本操作(裁剪、翻轉、旋轉等)、圖像分割、分類及特徵提取、圖像修復和圖像識別。而Python作為一種科學程式語言已在日漸普及,在生態系統庫中還免費提供了許多最為先進的圖像處理工具,因此成為了圖像處理的最佳選擇。
  • 10個Python圖像處理工具,入門必看,提效大法 | 資源
    原作:Parul Pandey銅靈 編譯整理量子位 出品 | 公眾號 QbitAI在圖像處理領域,一庫在手,相當於天下已有。
  • 基本的圖像處理與 OCR 文字識別工具總結 (Python)
    圖像處理和文字識別對於非標準控制項的識別十分有效,同時也能做很多事情。
  • 從零開始實現穿衣圖像分割完整教程(附python代碼演練)
    研究人員可以開發具有一定實用價值的應用。 我已經在這裡展示了我對這個領域的興趣,在那裡我開發了一個來自Zalando在線商店的推薦和標記服裝的解決方案。在這篇文章中,我們會開發一個提取連衣裙的應用。 它輸入原始的圖像(從網絡上下載或用智慧型手機拍照),並提取圖像中的連衣裙。 分割的難點在於原始圖像中存在了大量的噪聲,但是我們會在預處理期間通過一個技巧來解決這個問題。
  • Python PIL圖像處理開發極簡教程
    問題或建議,請公眾號留言;如果你覺得文章對你有幫助,歡迎轉發支持PIL安裝與介紹PIL是python image libaray縮寫,是python語言的圖像處理庫,很多時候對於一些簡單的圖像處理,我們經常使用的是其中一個fork項目pillow,它的github地址如下:https: