自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python處理圖像五個(gè)有趣場景,很實(shí)用!

開發(fā) 后端
Python像是叮當(dāng)貓的口袋,幾乎什么都能做,適合外行小白們?nèi)ッ鲗W(xué)習(xí),能極大的增加對編程的興趣。

 有些工具用python來實(shí)現(xiàn)不一定是技術(shù)上的最優(yōu)選擇,但可能是最簡潔、最面向大眾的。

介紹幾個(gè)不錯(cuò)的處理圖像的案例,并附上代碼,盡可能讓大家能拿來就用。

1、生成手繪圖片

現(xiàn)在很多軟件可以將照片轉(zhuǎn)換成手繪形式,python也可以實(shí)現(xiàn),而且定制化更強(qiáng),可批量轉(zhuǎn)換。

這里用到pillow庫,這是非常牛逼且專業(yè)的Python圖像處理庫

原圖:

[[390078]]

 

生成手繪后:

[[390079]]

 

代碼:

 

  1. # -*- coding: UTF-8 -*- 
  2. from PIL import Image 
  3. import numpy as np 
  4.  
  5. # 原始圖片路徑 
  6. original_image_path = "E:\\圖片\\陸家嘴.jpg" 
  7. # 要生成的手繪圖片路徑,可自定義 
  8. handdrawn_image_path = "E:\\圖片\\陸家嘴-手繪.jpg" 
  9.  
  10. # 加載原圖,將圖像轉(zhuǎn)化為數(shù)組數(shù)據(jù) 
  11. a=np.asarray(Image.open(original_image_path).convert('L')).astype('float'
  12. depth=10. 
  13.  
  14. #取圖像灰度的梯度值 
  15. grad=np.gradient(a) 
  16.  
  17. #取橫縱圖像梯度值 
  18. grad_x,grad_y=grad 
  19. grad_x=grad_x*depth/100. 
  20. grad_y=grad_y*depth/100. 
  21. A=np.sqrt(grad_x**2+grad_y**2+1.) 
  22. uni_x=grad_x/A 
  23. uni_y=grad_y/A 
  24. uni_z=1./A 
  25.  
  26. #光源的俯視角度轉(zhuǎn)化為弧度值 
  27. vec_el=np.pi/2.2 
  28.  
  29. #光源的方位角度轉(zhuǎn)化為弧度值 
  30. vec_az=np.pi/4. 
  31.  
  32. #光源對x軸的影響 
  33. dx=np.cos(vec_el)*np.cos(vec_az) 
  34. dy=np.cos(vec_el)*np.sin(vec_az) 
  35. dz=np.sin(vec_el) 
  36.  
  37. #光源歸一化,把梯度轉(zhuǎn)化為灰度 
  38. b=255*(dx*uni_x+dy*uni_y+dz*uni_z) 
  39.  
  40. #避免數(shù)據(jù)越界,將生成的灰度值裁剪至0-255內(nèi) 
  41. b=b.clip(0,255) 
  42.  
  43. #圖像重構(gòu) 
  44. im=Image.fromarray(b.astype('uint8')) 
  45.  
  46. print('完成'
  47. im.save(handdrawn_image_path) 

這里可以做成批量處理的轉(zhuǎn)手繪腳本,大家試試。

2、生成證件照

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

這里removebg用到了AI技術(shù),摳圖邊緣很柔和,效果挺不錯(cuò)的。

 

代碼:

 

  1. # encoding=utf-8 
  2. from PIL import Image 
  3. from removebg import RemoveBg 
  4.  
  5. # removebg涉及到api_key,需要到其官網(wǎng)申請 
  6. api_key = 'PysKLJueeoyK9NbJXXXXXXXXX' 
  7.  
  8. def change_bgcolor(file_in, file_out, api_key, color): 
  9.   ''
  10.       #必須為png格式 
  11.   ''
  12.   p, s = file_in.split("."
  13.   rmbg = RemoveBg(api_key, 'error.log'
  14.   rmbg.remove_background_from_img_file(file_in) 
  15.   file_no_bg = "{}.{}_no_bg.{}".format(p, s, s) 
  16.   no_bg_image = Image.open(file_no_bg) 
  17.   x, y = no_bg_image.size 
  18.   new_image = Image.new('RGBA', no_bg_image.size, color=color) 
  19.   new_image.paste(no_bg_image, (0, 0, x, y), no_bg_image) 
  20.   new_image.save(file_out) 
  21.  
  22.  
  23. # 修改照片尺寸 
  24. def change_size(file_in, file_out, width, height): 
  25.   image = Image.open(file_in) 
  26.   resized_image = image.resize((width, height), Image.ANTIALIAS) 
  27.   resized_image.save(file_out) 
  28.  
  29.  
  30. if __name__ == "__main__"
  31.   file_in = 'E:\\girl.png' 
  32.   file_out = 'E:\\girl_cutout.png' 
  33.   # 尺寸可按需求自修改 
  34.   # change_size(file_in, file_out, width, height) 
  35.    
  36.   # 換背景色 
  37.   color = (0, 125, 255) 
  38.   change_bgcolor(file_in, file_out, api_key, color) 
  39.    

3、生成藝術(shù)二維碼

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

 

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

該庫可以在命令行中運(yùn)行,你只需要傳遞網(wǎng)址鏈接、圖片地址等參數(shù),就可以生成相應(yīng)的二維碼,二維碼圖片默認(rèn)保存在當(dāng)前目錄下面。

命令行輸入格式:

myqr 網(wǎng)址鏈接

比如:

 

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

再按enter鍵執(zhí)行,就能生成對應(yīng)鏈接的二維碼了。

怎么融合圖片呢?很簡單,傳入圖片地址參數(shù)'-p'

比如說我d盤有一張海綿寶寶的圖片,地址是:d:\hmbb.jpg即傳入?yún)?shù)'-pd:\hmbb.jpg'在命令行鍵入:

 

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

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

4、生成詞云圖

詞云圖一般用來凸顯文本關(guān)鍵詞,產(chǎn)生視覺上的焦點(diǎn),利用好詞云會(huì)讓數(shù)據(jù)更加有說服力。

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

比如我用小丑的豆瓣評論做成一張?jiān)~云圖。

 

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

這里不對前兩步做詳細(xì)解析,只給出詞云代碼:

 

  1. def wordCloudImage(wordlist,width,height,bgcolor,savepath): 
  2.     # 可以打開你喜歡的詞云展現(xiàn)背景圖 
  3.     # cloud_mask = np.array(Image.open('nezha.png')) 
  4.     # 定義詞云的一些屬性 
  5.     wc = WordCloud( 
  6.         width=width,  # 圖幅寬度 900 
  7.         height=height,  # 圖幅高度 3000 
  8.         background_color=bgcolor,  # 背景圖分割顏色為白色 "black" 
  9.         # mask=cloud_mask,  # 背景圖樣 
  10.         max_words=300,  # 顯示最大詞數(shù) 
  11.         font_path='./fonts/simhei.ttf',  # 顯示中文 
  12.         collocations=False
  13.         # min_font_size=5,  # 最小尺寸 
  14.         # max_font_size=100,  # 最大尺寸 
  15.     ) 
  16.  
  17.     # wordfile是分詞后的詞匯列表 
  18.     x = wc.generate(wordlist) 
  19.     # 生成詞云圖片 
  20.     image = x.to_image() 
  21.     # 展示詞云圖片 
  22.     image.show() 
  23.     # savepath是圖片保存地址,保存詞云圖片 
  24.     wc.to_file(savepath) 

5、生成微信九宮格圖片

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

這個(gè)可以用很多軟件來做,python當(dāng)然也能實(shí)現(xiàn),只需不到50行代碼。

 

代碼:

 

  1. # 朋友圈九宮格圖片制作 
  2. # encoding=utf-8 
  3. from PIL import Image 
  4. import sys 
  5.  
  6.  
  7. # 先將input image 填充為正方形 
  8. def fill_image(image): 
  9.     width, height = image.size 
  10.     # 選取原圖片長、寬中較大值作為新圖片的九宮格半徑 
  11.     new_image_length = width if width > height else height 
  12.     # 生產(chǎn)新圖片【白底】 
  13.     new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white'
  14.     # 將原圖粘貼在新圖上,位置為居中 
  15.     if width > height: 
  16.         new_image.paste(image, (0, int((new_image_length - height) / 2))) 
  17.     else
  18.         new_image.paste(image, (int((new_image_length - width) / 2), 0)) 
  19.     return new_image 
  20.  
  21.  
  22. # 將圖片切割成九宮格 
  23. def cut_image(image): 
  24.     width, height = image.size 
  25.     # 一行放3張圖 
  26.     item_width = int(width / 3) 
  27.     box_list = [] 
  28.     for i in range(0, 3): 
  29.         for j in range(0, 3): 
  30.             box = (j * item_width, i * item_width, (j + 1) * item_width, (i + 1) * item_width) 
  31.             box_list.append(box) 
  32.     image_list = [image.crop(box) for box in box_list] 
  33.     return image_list 
  34.  
  35.  
  36. # 保存圖片 
  37. def save_images(image_list): 
  38.     index = 1 
  39.     for image in image_list: 
  40.         image.save('e:\\圖片\\'+str(index) + '.png', 'PNG') 
  41.         index += 1 
  42.  
  43.  
  44. if __name__ == '__main__'
  45.     file_path = "e:\\圖片\\龍貓.jpg" 
  46.     image = Image.open(file_path) 
  47.     # image.show() 
  48.     image = fill_image(image) 
  49.     image_list = cut_image(image) 
  50.     print(len(image_list)) 
  51.     save_images(image_list) 

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

責(zé)任編輯:華軒 來源: Python大數(shù)據(jù)分析
相關(guān)推薦

2022-10-10 23:19:02

Python腳本語言工具庫

2023-10-26 07:24:19

ChatGPT聊天機(jī)器人信息

2024-02-23 18:17:57

Python腳本開發(fā)

2023-07-05 07:25:31

Python功能布爾值

2023-10-26 18:03:14

索引Python技巧

2024-01-31 12:13:02

JavaScriptSet元素

2022-01-23 14:08:52

PythonPygame

2009-08-25 14:25:19

Eclipse 3.5

2023-08-13 08:29:27

ChatGPT指令AI

2024-10-11 13:17:16

Linux命令行快捷導(dǎo)航

2020-08-13 08:27:30

圖像

2024-05-23 11:53:24

Python代碼異常處理

2020-11-16 16:04:42

CSS設(shè)計(jì)代碼

2017-02-10 08:59:14

程序員

2023-06-27 15:50:23

Python圖像處理

2022-07-28 08:33:59

JupyterPython

2019-11-01 13:37:53

Python數(shù)據(jù)結(jié)構(gòu)編程語言

2022-10-08 14:47:21

Python工具開源

2010-08-27 10:12:53

CSS

2024-06-27 08:09:40

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號