国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python圖片合成的示例

瀏覽:79日期:2022-07-06 08:08:18

python的PIL庫(kù)簡(jiǎn)直好用的不得了,PIL下面的Image庫(kù)更是封裝了很多對(duì)圖片處理的函數(shù),關(guān)于Image庫(kù)的介紹和使用,看這里:http://effbot.org/imagingbook/image.htm

這里用我半個(gè)月前看到的一篇博客寫(xiě)的demo作為背景,做一下圖片的合成

圖片可以看作是很多像素點(diǎn)組成的,每個(gè)像素點(diǎn)都是一個(gè)RGB顏色,(red, green, blue), 那么合成兩張照片就有辦法了,我們可以在一張新的RGB色的圖片里一個(gè)像素點(diǎn)取圖片一的對(duì)應(yīng)位置的像素,下一個(gè)像素點(diǎn)取圖片二的像素,直到遍歷完成,代碼如下:

from PIL import Image##這里采用傳入圖片地址調(diào)用此函數(shù)#這個(gè)方法目前不支持按比例合成,默認(rèn)為1:1#各取一個(gè)像素點(diǎn)合并,傳入的參數(shù)為兩張圖片的地址def merge1(img1_address,img2_addess): status=100 #狀態(tài)碼100為正常 # 200為地址錯(cuò)誤 try: img1=Image.open(img1_address) img2=Image.open(img2_address) except: status=200 img_new='' else: width=min(img1.size[0],img2.size[0]) height=min(img1.size[1],img2.size[1]) print(width,height) img_new = Image.new(’RGB’,(width,height)) for x in range(width): for y in range(height): if y%2==0: pixel=img1.getpixel((x,y)) img_new.putpixel((x,y),pixel) else: pixel=img2.getpixel((x,y)) img_new.putpixel((x,y),pixel) finally: return img_new,status

上述代碼會(huì)返回一張新的圖片和一個(gè)狀態(tài)碼,接受的時(shí)候用兩個(gè)變量接受

另一種方法是每個(gè)像素點(diǎn)各取%50的原圖片的顏色,然后把像素點(diǎn)放置在對(duì)應(yīng)位置,為了功能更加強(qiáng)大,我把兩者的混合比例設(shè)為可調(diào),默認(rèn)是50%的比例,代碼如下:

from PIL import Image#將像素點(diǎn)按比例取色,然后合成一個(gè)新像素點(diǎn)#傳入的參數(shù)為兩張圖片的地址和比例#如果兩者之和不為1則以第一個(gè)圖片的比例為準(zhǔn)def merge2(img1_address,img2_address,percent1=0.50,percent2=0.50): status=100 #狀態(tài)碼100為正常 # 200為地址錯(cuò)誤 try: img1=Image.open(img1_address) img2=Image.open(img2_address) except: status=200 img_new='' else: if percent1+percent2!=1: percent2=1-percent1 width = min(img1.size[0],img2.size[0]) height = min(img1.size[1],img2.size[1]) img_new = Image.new(’RGB’,(width,height)) for x in range(width): for y in range(height): r1,g1,b1=img1.getpixel((x,y)) r2,g2,b2=img2.getpixel((x,y)) r=int(percent1*r1+percent2*r2) g=int(percent1*g1+percent2*g2) b=int(percent1*b1+percent2*b2) img_new.putpixel((x,y),(r,g,b)) finally: return img_new,status

返回的參數(shù)與上述相同 如果想要保存圖片可用image.save()函數(shù)保存

總的代碼如下:

from PIL import Image##這里采用傳入圖片地址調(diào)用此函數(shù)#這個(gè)方法目前不支持按比例合成,默認(rèn)為1:1#各取一個(gè)像素點(diǎn)合并,傳入的參數(shù)為兩張圖片的地址def merge1(img1_address, img2_addess, direct): status=100 #狀態(tài)碼100為正常 # 200為地址錯(cuò)誤 try: img1=Image.open(img1_address) img2=Image.open(img2_address) except: status=200 img_new='' else: width=min(img1.size[0], img2.size[0]) height=min(img1.size[1], img2.size[1]) print(width,height) img_new = Image.new(’RGB’,(width, height)) for x in range(width): for y in range(height): if y%2 == 0: pixel = img1.getpixel((x,y)) img_new.putpixel((x,y), pixel) else: pixel = img2.getpixel((x,y)) img_new.putpixel((x,y), pixel) finally: return status#將像素點(diǎn)按比例取色,然后合成一個(gè)新像素點(diǎn)#傳入的參數(shù)為兩張圖片的地址和比例#如果兩者之和不為1則以第一個(gè)圖片的比例為準(zhǔn)def merge2(img1_address, img2_address, direction, percent1): status = 100 #狀態(tài)碼100為正常 # 200為地址錯(cuò)誤 try: img1 = Image.open(img1_address) img2 = Image.open(img2_address) except: status = 200 img_new = '' else: percent2 = 1 - percent1 width = min(img1.size[0], img2.size[0]) height = min(img1.size[1], img2.size[1]) img_new = Image.new(’RGB’, (width,height)) for x in range(width): for y in range(height): r1,g1,b1=img1.getpixel((x,y)) r2,g2,b2=img2.getpixel((x,y)) r = int(percent1 * r1 + percent2 * r2) g = int(percent1 * g1 +percent2 * g2) b = int(percent1 * b1 +percent2 * b2) img_new.putpixel((x,y),(r,g,b)) img_new.save(direction) #img_new.show() finally: return status #切記在接受返回信息時(shí)先判斷狀態(tài)碼是否異常,如果正確再執(zhí)行相應(yīng)操作if __name__==’__main__’: img1_address = 'B:PictureYourName1.jpg' img2_address = 'B:PictureYourName2.jpg' direction = 'D:/Python/PyQt/課程設(shè)計(jì)/merges/merge9.png' status = merge2(img1_address, img2_address, direction, 0.30) print(status)

當(dāng)然,我發(fā)現(xiàn)Image庫(kù)中有Image.blend(image1, image2, alpha)這個(gè)混合圖片的函數(shù),還沒(méi)看源碼,不知道他是用什么方法實(shí)現(xiàn)的。

原先的兩張照片:

python圖片合成的示例

合成后的照片:

python圖片合成的示例

左圖是方法一,右圖是方法二

優(yōu)劣: 方法一不易造成曝光過(guò)度,因?yàn)閷?shí)際的像素點(diǎn)并沒(méi)改動(dòng),只是間隔變大了,但這樣可能會(huì)造成輪廓不清晰 方法二在比例適當(dāng)時(shí)效果是優(yōu)于方式一的,但比例不合適就會(huì)看起來(lái)像曝光過(guò)度一樣,示例中方法二用的比例是0.3:0.7,又是比例不當(dāng)效果會(huì)很糟糕,孰優(yōu)孰劣請(qǐng)按效果好壞使用。

以上就是python圖片合成的示例的詳細(xì)內(nèi)容,更多關(guān)于python圖片合成的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 巴彦淖尔市| 光山县| 乐业县| 重庆市| 安化县| 衡东县| 辰溪县| 增城市| 庆云县| 额济纳旗| 化德县| 达孜县| 乐都县| 定安县| 洪洞县| 英山县| 玛曲县| 盱眙县| 虞城县| 黑水县| 临泽县| 辉南县| 宿州市| 确山县| 松滋市| 遂川县| 砀山县| 平和县| 根河市| 曲沃县| 安陆市| 海城市| 南投市| 青河县| 景德镇市| 房产| 涞水县| 乌审旗| 汪清县| 建平县| 巩留县|