Python将图片主色透明化算法
生活随笔
收集整理的這篇文章主要介紹了
Python将图片主色透明化算法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
????????最近在研究將一張白色大背景圖片中間圖片內(nèi)容的顏色透明化,用于前端選擇顏色替換顏色的可視化效果的前期圖片數(shù)據(jù)處理的透明化圖片數(shù)據(jù)做準(zhǔn)備。
????????嘗試了蒙版但是效果不是太好,可能還沒研究透吧,先分享一個經(jīng)過訓(xùn)練效果還可用的算法。
????????首先我們要實現(xiàn)下面的效果也就是小鴨子的帽子和領(lǐng)子原圖是黑色的做成前端可自由調(diào)配顏色的效果:
????????
?
?
????????為了實現(xiàn)上面的效果,首先我們需要將帽子、眼睛、領(lǐng)帶的部分進行透明化處理,此時我嘗試使用python的PIL 和 haishoku代碼如下:
#!/usr/bin/python3 # -*- coding: UTF-8 -*-import cv2import numpy as npfrom PIL import Image from haishoku.haishoku import Haishokudef Dominant_Hue_hyalinize(image):dominant = Haishoku.getDominant(image) #獲取圖片主色調(diào)palette = Haishoku.getPalette(image) #獲取圖片主色調(diào)數(shù)組 #主色調(diào)數(shù)組長度arrLen = len(palette)if arrLen < 1 :return "失敗1"else:if arrLen<8 :#主色調(diào)大于5組小于8組的則按照第三組顏色的小數(shù)值進行,否則在此基礎(chǔ)上減去0.2 arrLenNum = ( arrLen+1 )/10 if arrLen > 5 else ( arrLen+1 )/10 -0.2else:#主色調(diào)超過8組的 調(diào)小替換透明的范圍arrLenNum = ( arrLen+1 )/10 - 0.5 #主色調(diào)最多的顏色進行統(tǒng)計總和nums = sum(dominant)#如果第一主色調(diào)綜合大于750且在(250,250,250)顏色值上的則flag設(shè)置為一,用于下方數(shù)組的保留白色大背景flag = 1 if dominant[0] >= 250 and nums >= 750 else 0leftarrMax = [] for index,item in enumerate(palette):#小數(shù)值*100轉(zhuǎn)整型判斷大于0的則視為要替換顏色的范圍數(shù)組per = int(item[0]*100)if flag and index !=0 and per>0: leftarrMax.append((item[1][0],item[1][1],item[1][2])) if len(leftarrMax)<1 :return "失敗"else:#打開圖片進行透明化顏色的替換img = Image.open(image) planeIm = img.convert('RGBA')img.close()#獲取圖片顏色數(shù)組datas = planeIm.getdata()newData = []for item in datas: if item[0] <= leftarrMax[0][0]*0.2 or item[0] < leftarrMax[1][0] * arrLenNum:newData.append((255, 255, 255, 0)) # 透明化else:newData.append(item) #顏色不變化planeIm.putdata(newData)planeIm.show() #顯示效果planeIm.save('output.png', "PNG") #存儲數(shù)據(jù)圖到本地planeIm.close()return "成功"image = "img/1.png" status = Dominant_Hue_hyalinize(image) print(status)最終????????運行后的效果如圖:
?
????????剩下切換效果的部分就不再這里贅述了,直接參考Jquery相關(guān)效果替換背景顏色就可以達到效果。
background-color: rgba(245, 25, 45, 0.55);總結(jié)
以上是生活随笔為你收集整理的Python将图片主色透明化算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机控制技术.ppt,计算机控制技术.
- 下一篇: 串口通信原理和简介