1. 程式人生 > >Python製作表情包還能去掉馬賽克?教程在手,看片無憂。

Python製作表情包還能去掉馬賽克?教程在手,看片無憂。

在去馬賽克教程之前我們先來說說表情包鬥圖這點事,有沒有遇到這種時刻:朋友不斷髮來有趣又生動的表情包,連連霸屏你的聊天記錄,你卻半天才發出一句話,無圖抵抗的囧態?今天小編教你一招逆襲!

本招瞬間秒殺你的鬥圖好友!表情包不僅僅是一張圖片,一張動圖,更是一種精神,是我們生活中的調味劑,慢慢一張張去尋找存在、儲存再發送,是不是好累好麻煩?想想算了,鬥圖鬥不過,打字也不想打,等著被KO?python在手,鬥圖無敵手!小編來救你(壞笑ing)

首先,用scrapy框架爬取某表情網站表情圖,原始碼附贈:
import scrapy

import os,sys

import requests

import re

class scrapyone(scrapy.Spider):

name = "stackone"

start_urls = ["http://qq.yh31.com/ql/bd/"]

def parse(self,response):

hrf=response.xpath('//*[@id="main_bblm"]/div[2]/dl/dd/li')

for li in hrf:

item={}

href=li.xpath('a/@href').extract()

hreftext=li.xpath('a/text()').extract()

full_url = 'http://qq.yh31.com'+ ''.join(list(href))

hreftext=''.join(list(hreftext))

#資料夾名稱

if hreftext=='>更多>':

continue

path = 'C:GIF'

if not os.path.exists(path):

os.makedirs(path)

item['dirname']=hreftext

yield scrapy.Request(url=full_url,meta={'key':item},callback = self.parse1)

def parse1(self,response):

ite={}

full_url=[]

url1 = response.xpath('//*[@id="pe100_page_infolist"]/a[2]/@href').extract()

url2 = response.xpath('//*[@id="pe100_page_infolist"]/a[2]/@href').re('d+')

url1 = ''.join(url1)

url1 = url1.split('_')

url2 = ''.join(url2)

ite['dirn']=response.meta['key']['dirname']

for i in range(1,int(url2)+1):

full_url='http://qq.yh31.com'+url1[0]+'_'+str(i)+'.html'

#print(full_url)

yield scrapy.Request(url=full_url,meta={'key1':ite},callback = self.parse2)

def parse2(self,response):

p1=response.meta['key1']['dirn']

resp = response.xpath('//*[@id="main_bblm"]/div[1]/li/dt/a')

path = 'C:GIF'+''.join(p1)

if not os.path.exists(path):

os.makedirs(path)

for lst in resp:

alt = lst.xpath('img/@alt').extract()

src = lst.xpath('img/@src').extract()

src = 'http://qq.yh31.com'+ ''.join(list(src))

alt = ''.join(list(alt))

html=requests.get(src)

with open(path+''+alt+'.gif', 'wb') as file:

file.write(html.content)

指令碼執行方式:cmd-->切換到指令碼所在目錄-->scrapy runspider xxxx.py

最終成效

執行後會自動根據GIF分類在c:gif資料夾下建立相應資料夾儲存gif圖片,想發那張發哪張,那麼對於那些圖片上的馬賽克,你有沒有很苦惱?如果上面的表情包爬取還不夠滿足你,那麼接下來,教你如何去掉圖片馬賽克,先來看看效果圖:

厲害不?

其實技巧是利用了Python中OPenCV的優勢,標定馬賽克的特徵,使用CV2.inRange二值化標識馬賽克對圖片進行二值化處理;程式碼如下:

關於怎麼快速學python,可以加下小編的python學習群:611+530+101,不管你是小白還是大牛,小編我都歡迎,不定期分享乾貨每天晚上20:00都會開直播給大家分享python學習知識和路線方法,群裡會不定期更新最新的教程和學習方法,大家都是學習python的,或是轉行,或是大學生,還有工作中想提升自己能力的,如果你是正在學習python的小夥伴可以加入學習。最後祝所有程式設計師都能夠走上人生巔峰,讓程式碼將夢想照進現實

其次,使用OPenCV的dilate方法,擴充套件特徵的區域,優化圖片處理效果;

最後使用inpaint方法,把噪聲的mask作為引數,推理並修復圖片。