python两张图片融合_python实现两张图片的像素融合

本文实例为大家分享了python实现两张图片像素融合的具体代码,供大家参考,具体内容如下

通过计算两张图片的颜色直方图特征,利用直方图对图片的颜色进行融合。

import numpy as np

import cv2

from PIL import Image,ExifTags

def calcMeanAndVariance(img):

row=img.shape[0]

col=img.shape[1]

#channel=img.shape[2]

total=row*col

print (row,col,total)

mean=np.zeros((3))

variance=np.zeros((3))

sum=np.zeros((3))

for i in range(row):

for j in range(col):

sum[0]+=img[i][j][0]

sum[1]+=img[i][j][1]

sum[2]+=img[i][j][2]

mean[0]=sum[0]/total

mean[1]=sum[1]/total

mean[2]=sum[2]/total

sum=np.zeros((3))

for i in range(row):

for j in range(col):

sum[0]=np.square(img[i][j][0]-mean[0])

sum[1]=np.square(img[i][j][1]-mean[1])

sum[2]=np.square(img[i][j][2]-mean[2])

variance[0]=np.sqrt(sum[0]/total)

variance[1]=np.sqrt(sum[1]/total)

variance[2]=np.sqrt(sum[2]/total)

print (mean,variance)

return mean,variance

def cololTransit(img1,img2):

image1 = cv2.cvtColor(img1, cv2.COLOR_BGR2LAB)

image2=cv2.cvtColor(img2, cv2.COLOR_BGR2LAB)

mean1,variance1=calcMeanAndVariance(image1)

mean2,variance2=calcMeanAndVariance(image2)

#print (mean1,variance1)

radio=np.zeros((3))

radio[0]=variance2[0]/variance1[0]

radio[1]=variance2[1]/variance1[1]

radio[2]=variance2[2]/variance1[2]

print('test', radio)

row=image1.shape[0]

col=image1.shape[1]

for i in range(row):

for j in range(col):

image1[i][j][0]=min(255,max(0,radio[0]*(image1[i][j][0]-mean1[0])+mean2[0]))

image1[i][j][1]=min(255,max(0,radio[1]*(image1[i][j][1]-mean1[1])+mean2[1]))

image1[i][j][2]=min(255,max(0,radio[2]*(image1[i][j][2]-mean1[2])+mean2[2]))

image = cv2.cvtColor(image1, cv2.COLOR_BGR2LAB)

return image

if __name__=='__main__':

img1=cv2.imread('1.jpg')

img2=cv2.imread('2.jpg')

cv2.namedWindow('src')

cv2.namedWindow('dst')

#cv2.resizeWindow('src',500,500)

#cv2.resizeWindow('dst',500,500)

cv2.imshow('src',img1)

cv2.imshow('dst',img2)

cv2.waitKey()

cv2.destroyAllWindows()

img=cololTransit(img1,img2)

cv2.namedWindow('result')

cv2.imshow('result',img)

cv2.waitKey()

cv2.destroyAllWindows()

#print (img)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值