日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv中的美图技巧(祛斑,词云,风格迁移,抠图,插图,修改背景,图片二维码)等着你的女朋友夸你吧

發布時間:2024/9/30 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv中的美图技巧(祛斑,词云,风格迁移,抠图,插图,修改背景,图片二维码)等着你的女朋友夸你吧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

個人ps 沒掌握得怎么好,嘗試用程序來完成ps的功能吧。
有斑點怎么辦:祛斑。
只有一張城市白天圖,像生成黑夜圖怎么辦,用風格遷移把。
人物摳圖就不說啦吧。
沒錢帶女友旅游世界怎么辦,我教你修改你背景和插圖,帶女友‘旅游’世界。
把支付寶掃碼圖換成女友背景圖不香嗎。

圖片祛斑

OpenCV中提供的邊緣保留濾波可以實現該功能

先上代碼

#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Author: yudengwu # @Date : 2020/8/24 import cv2 as cv import numpy as np def bi_demo(image):dst = cv.bilateralFilter(image, 0, 40, 15)cv.imshow("bi_demo", dst) print("--------- Hello Python ---------") src = cv.imread("20200824095210.png") cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src) bi_demo(src) cv.waitKey(0) cv.destroyAllWindows()

用到的原理:高斯雙邊模糊
具體鏈接:
opencv進階學習筆記5:圖像模糊操作,圖像銳化,邊緣保留濾波EPF(圖像濾鏡)

cv.bilateralFilter(image, 0, 40, 15)
中40 Sigma_color:控制顏色像素,領域中顏色和當前點像素不超過40的點都會用來平均,也可以修改為其他數值。
15指Sigma_space:控制距離,,則雖然離得較遠,距離不超過15,但是,只要值相近,就會互相影響,用于平均。當然也可以修改數值。

均值偏移濾波也可以用來做濾鏡。

詞云

詞云庫需要安裝

import cv2 as cv import numpy as np from wordcloud import WordCloud, ImageColorGenerator#讀取背景圖片 mask=np.array(cv.imread('hua.jpg')) print(mask) # 定義詞云對象 wc = WordCloud(# 設置詞云背景為白色background_color='white',# 設置詞云最大的字體max_font_size=30,# 設置詞云輪廓mask=mask,# 字體路徑,如果需要生成中文詞云,需要設置該屬性,設置的字體需要支持中文font_path='msyh.ttc' ) # 讀取文本 text = open('歌詞.txt', 'r', encoding='utf-8').read() # 生成詞云 wc.generate(text) # 給詞云上色 wc = wc.recolor(color_func=ImageColorGenerator(mask)) wc.to_file('result.png')

結果

WordCloud參數解析:

from wordcloud import WordCloudfont_path : string #字體路徑,需要展現什么字體就把該字體路徑+后綴名寫上,如:font_path = '黑體.ttf'width : int (default=400) #輸出的畫布寬度,默認為400像素height : int (default=200) #輸出的畫布高度,默認為200像素prefer_horizontal : float (default=0.90) #詞語水平方向排版出現的頻率,默認 0.9 (所以詞語垂直方向排版出現頻率為 0.1 )mask : nd-array or None (default=None) #如果參數為空,則使用二維遮罩繪制詞云。如果 mask 非空,設置的寬高值將被忽略,遮罩形狀被 mask 取代。除全白(#FFFFFF)的部分將不會繪制,其余部分會用于繪制詞云。如:bg_pic = imread('讀取一張圖片.png'),背景圖片的畫布一定要設置為白色(#FFFFFF),然后顯示的形狀為不是白色的其他顏色。可以用ps工具將自己要顯示的形狀復制到一個純白色的畫布上再保存,就ok了。一般為mask=np.array(Image.open('xxx.jpg'))。其中from PIL import Imagescale : float (default=1) #按照比例進行放大畫布,如設置為1.5,則長和寬都是原來畫布的1.5倍min_font_size : int (default=4) #顯示的最小的字體大小font_step : int (default=1) #字體步長,如果步長大于1,會加快運算但是可能導致結果出現較大的誤差max_words : number (default=200) #要顯示的詞的最大個數stopwords : set of strings or None #設置需要屏蔽的詞,如果為空,則使用內置的STOPWORDSbackground_color : color value (default=”black”) #背景顏色,如background_color='white',背景顏色為白色max_font_size : int or None (default=None) #顯示的最大的字體大小mode : string (default=”RGB”) #當參數為“RGBA”并且background_color不為空時,背景為透明relative_scaling : float (default=.5) #詞頻和字體大小的關聯性color_func : callable, default=None #生成新顏色的函數,如果為空,則使用 self.color_funcregexp : string or None (optional) #使用正則表達式分隔輸入的文本collocations : bool, default=True #是否包括兩個詞的搭配colormap : string or matplotlib colormap, default=”viridis” #給每個單詞隨機分配顏色,若指定color_func,則忽略該方法random_state : int or None #為每個單詞返回一個PIL顏色#其他部分函數 fit_words(frequencies) #根據詞頻生成詞云 generate(text) #根據文本生成詞云 generate_from_frequencies(frequencies[, ...]) #根據詞頻生成詞云 generate_from_text(text) #根據文本生成詞云 process_text(text) #將長文本分詞并去除屏蔽詞(此處指英語,中文分詞還是需要自己用別的庫先行實現,使用上面的 fit_words(frequencies) ) recolor([random_state, color_func, colormap]) #對現有輸出重新著色。重新上色會比重新生成整個詞云快很多 to_array() #轉化為 numpy array to_file(filename) #輸出到文件

風格遷移

風格遷移,顧名思義就是將某一張圖片的風格遷移到另一張圖片上。

需要的庫OpenCV 和paddlehub

PaddleHub是為了解決對深度學習模型的需求而開發的工具。基于飛槳領先的核心框架,精選效果優秀的算法,提供了百億級大數據訓練的預訓練模型,方便用戶不用花費大量精力從頭開始訓練一個模型。

感謝百度飛槳平臺

安裝命令

pip install opencv-python python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple pip install -i https://mirror.baidu.com/pypi/simple paddlehub #!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Author: yudengwu # @Date : 2020/8/24 import cv2 import paddlehub as hub # 加載模型庫 stylepro_artistic = hub.Module(name="stylepro_artistic") # 進行風格遷移 im = stylepro_artistic.style_transfer(images=[{# 原圖'content': cv2.imread("baitian.jpg"),# 風格圖'styles': [cv2.imread("yewan.jpg")]}],# 透明度alpha = 0.7 ) # 從返回的數據中獲取圖片的ndarray對象 im = im[0]['data'] # 保存結果圖片 cv2.imshow('result',im) cv2.imwrite('result.jpg', im) cv2.waitKey() cv2.destroyAllWindows()

素材給的不是很好,將就看吧。
我們只有圖1白天照片,在網上搜索一下夜晚,風格生成圖三。
當然可以調整
透明度
alpha = 0.7

批量摳圖

說明下:該模型只能扣取人物

讀取圖片

import os import cv2 import matplotlib.pyplot as plt list_all=[]#初始化一個空列表 for root ,dirs,files in os.walk(r'C:\Users\Shineion\Desktop\tu'):for name in files:file_path=os.path.join(root,name)#包含路徑的文件list_all.append(file_path) print(len(list_all)) img =[cv2.imread(image_path) for image_path in list_all] for i in range(len(list_all)):cv2.imshow('result{}'.format(i),img[i]) cv2.waitKey() cv2.destroyAllWindows()

摳圖開始

import numpy as np import paddlehub as hub module = hub.Module(name="deeplabv3p_xception65_humanseg") input_dict = {"image": list_all} # execute predict and print the result results = module.segmentation(data=input_dict) for i in range(len(list_all)):print(results[i]["data"].shape)prediction = results[i]["data"]#得到是空白圖,prediction= prediction.astype(np.uint8)dst = cv2.bitwise_and(img[i], img[i],mask=prediction)#與運算cv2.imshow('result{0}'.format(i),dst)cv2.imwrite(r"C:\Users\Shineion\Desktop\tu\result{}.jpg".format(i),dst) cv2.waitKey() cv2.destroyAllWindows()

結果

查看下中間過程prediction是什么

修改背景色

前面扣的圖背景是黑色,接下來我們嘗試將背景改為白色。
這次我們只扣一張圖

#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Author: yudengwu # @Date : 2020/8/24# -*- coding: utf-8 -*- import paddlehub as hub import cv2 import numpy as np#讀取原始圖 image=cv2.imread('3.jpg') cv2.imshow('original',image)#調用摳圖模型 module = hub.Module(name="deeplabv3p_xception65_humanseg") test_img_path = ["3.jpg"]#圖片路徑 input_dict = {"image": test_img_path}#摳圖 results = module.segmentation(data=input_dict)#摳圖#摳圖結果 prediction = results[0]["data"]#摳圖結果:數值為float prediction= prediction.astype(np.uint8)#摳圖結果轉化格式,轉為圖片格式 得到是黑白圖,其中人為白色,背景為黑色, cv2.imshow('prediction',prediction)#背景顏色替換 rows,cols,channels = image.shape for i in range(rows):for j in range(cols):if prediction[i,j]==0: # 像素點為255表示的是白色,0為黑色,我們就是要將黑色處的像素點,替換為紅白色image[i,j]=(255,255,255) # 此處替換顏色,為BGR通道,不是RGB通道 cv2.imshow('result',image) cv2.waitKey() cv2.destroyAllWindows()

插圖 和修改背景

將一張圖插入到另一張中

修改背景:把一張圖插入到另一張圖中

很簡單的原理,將背景圖的部分像素替換成另一張圖就可以。
前提:圖必須小于背景圖

import cv2image1=cv2.imread('3.jpg') image1=cv2.resize(image1,None,fx=0.3,fy=0.3) cv2.imshow('image1',image1) bg=cv2.imread('bg.jpg') cv2.imshow('original bg ',bg) rows,cols,channels = image1.shape#rows,cols最后一定要是前景圖片的,后面遍歷圖片需要用到#遍歷替換 center=[50,100]#在新背景圖片中的位置 for i in range(rows):for j in range(cols):bg[center[0]+i,center[1]+j]=image1[i,j]#此處替換顏色,為BGR通道cv2.imshow('res',bg) #cv2.imwrite('bg.jpg',bg) cv2.waitKey() cv2.destroyAllWindows()

修改背景

帶著女朋友去旅游,沒有錢怎么辦,直接把她的圖移動到某一風景區,合成。
一張風景圖就有啦。

import cv2#讀取人物圖 image1=cv2.imread('3.jpg') image1=cv2.resize(image1,None,fx=0.3,fy=0.3) cv2.imshow('image1',image1) #讀取背景圖 bg=cv2.imread('bg.jpg') bg=cv2.resize(bg,None,fx=0.7,fy=0.7) cv2.imshow('original bg ',bg)rows,cols,channels = image1.shape#rows,cols最后一定要是前景圖片的,后面遍歷圖片需要用到 #對人物圖進行二值化處理,自己手動調二值化數據 gray = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY) ret, binary = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY)#二值化 cv2.imshow('binary',binary)#遍歷替換 center=[200,350]#在新背景圖片中的位置 for i in range(rows):for j in range(cols):if binary[i,j]!=255:bg[center[0]+i,center[1]+j]=image1[i,j]#此處替換顏色,為BGR通道cv2.imshow('res',bg) #cv2.imwrite('bg.jpg',bg) cv2.waitKey() cv2.destroyAllWindows()

說明 人物圖的尺寸必須小于背景圖

對人物圖進行二值化處理后,可以再加腐蝕膨脹操作,使圖更好。
二值化選用人工調數值,自動二值化效果不好。

圖片二維碼

用到的庫
安裝命令

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ myqr #!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Author: yudengwu # @Date : 2020/8/24# -*- coding: utf-8 -*-from MyQR import myqr myqr.run(words='https://blog.csdn.net/KOBEYU652453', # 個人博客picture='4.jpg', # 背景圖片colorized=True, # 是否有顏色,如果為False則為黑白save_name='41.png' # 輸出文件名 )

效果圖


送上OpenCV學習資源:
36篇博文帶你學完opencv :python+opencv進階版學習筆記目錄
36篇博文帶你學完opencv :python3+opencv學習筆記匯總目錄(基礎版)

電氣專業的計算機萌新,寫博文不容易,如果你覺得本文對你有用,請點個贊支持下,謝謝。

總結

以上是生活随笔為你收集整理的opencv中的美图技巧(祛斑,词云,风格迁移,抠图,插图,修改背景,图片二维码)等着你的女朋友夸你吧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。