Python+OpenCV实现图像融合的原理及代码
作者:~沐春风~ 时间:2022-08-01 00:03:52
根据导师作业安排,在学习数字图像处理(刚萨雷斯版)第六章 彩 * 像处理 中的彩色模型后,导师安排了一个比较有趣的作业:
融合原理为:
1 注意:遥感原RGB图image和灰度图Grayimage为测试用的输入图像;
2 步骤:(1)将RGB转换为HSV空间(H:色调,S:饱和度,V:明度);
(2)用Gray图像诶换掉HSV中的V;
(3)替换后的HSV转换回RGB空间即可得到结果。
书上只介绍了HSI彩色模型,并没有说到HSV,所以需要网上查找资料。
Python代码如下:
import cv2
import numpy as np
import math
from matplotlib import pyplot as plt
def caijian(img):#裁剪图像与否根据选择图像大小而定,调用了OpenCV函数
weight=img.shape[0]
height=img.shape[1]
print(“图像大小为:%d*%d”%(weight,height))
img=cv2.resize(img,(int(weight/2),int(height/2)),interpolation=cv2.INTER_CUBIC)
return(img)
def graytograyimg(img):
grayimg=img1
weight=img.shape[0]
height=img.shape[1]
for i in range(weight):
for j in range(height):
grayimg[i,j]=0.299img[i,j,0]+0.587img[i,j,1]+0.114img[i,j,2]
return(grayimg)
def RGBtoHSV(img):
b,g,r=cv2.split(img)
rows,cols=b.shape
H=np.ones([rows,cols],“float”)
S=np.ones([rows,cols],“float”)
V=np.ones([rows,cols],“float”)
print(“RGB图像大小:%d*%d”%(rows,cols))
for i in range(0, rows):
for j in range(0, cols):
MAX=max((b[i,j],g[i,j],r[i,j]))
MIN=min((b[i,j],g[i,j],r[i,j]))
V[i,j]=MAX
if V[i,j]0:
S[i,j]=0
else:
S[i,j]=(V[i,j]-MIN)/V[i,j]
if MAXMIN:
H[i,j]=0 # 如果rgb三向量相同,色调为黑
elif V[i,j]==r[i,j]:
H[i,j]=(60*(float(g[i,j])-b[i,j])/(V[i,j]-MIN))
elif V[i,j]==g[i,j]:
H[i,j]=60*(float(b[i,j])-r[i,j])/(V[i,j]-MIN)+120
elif V[i,j]==b[i,j]:
H[i,j]=60*(float(r[i,j])-g[i,j])/(V[i,j]-MIN)+240
if H[i,j]<0:
H[i,j]=H[i,j]+360
H[i,j]=H[i,j]/2
S[i,j]=255*S[i,j]
result=cv2.merge((H,S,V)) # cv2.merge函数是合并单通道成多通道
result=np.uint8(result)
return(result)
def graytoHSgry(grayimg,HSVimg):
H,S,V=cv2.split(HSVimg)
rows,cols=V.shape
for i in range(rows):
for j in range(cols):
V[i,j]=grayimg[i][j][0]
newimg=cv2.merge([H,S,V])
newimg=np.uint8(newimg)
return newimg
def HSVtoRGB(img,rgb):
h1,s1,v1=cv2.split(img)
rg = rgb.copy()
rows,cols=h1.shape
r,g,b=0.0,0.0,0.0
b1,g1,r1 = cv2.split(rg)
print(“HSV图像大小为:%d*%d”%(rows,cols))
for i in range(rows):
for j in range(cols):
h=h1[i][j]
v=v1[i][j]/255
s=s1[i][j]/255
h=h2
hx=int(h/60.0)
hi=hx%6
f=hx-hi
p=v(1-s)
q=v*(1-fs)
t=v(1-(1-f)s)
if hi0:
r,g,b=v,t,p
elif hi1:
r,g,b=q,v,p
elif hi2:
r,g,b=p,v,t
elif hi3:
r,g,b=p,q,v
elif hi4:
r,g,b=t,p,v
elif hi5:
r,g,b=v,p,q
r,g,b=(r255),(g255),(b255)
r1[i][j]=int®
g1[i][j]=int(g)
b1[i][j]=int(b)
rg=cv2.merge([b1,g1,r1])
return rg
img=cv2.imread(“D:/RGB.bmp”)
gray=cv2.imread(“D:/gray.bmp”)
img=caijian(img)
gray=caijian(gray)
grayimg=graytograyimg(gray)
HSVimg=RGBtoHSV(img)
HSgray=graytoHSgry(grayimg,HSVimg)
RGBimg=HSVtoRGB(HSgray,img)
cv2.imshow(“image”,img)
cv2.imshow(“Grayimage”,grayimg)
cv2.imshow(“HSVimage”,HSVimg)
cv2.imshow(“HSGrayimage”,HSgray)
cv2.imshow(“RGBimage”,RGBimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
以上代码是在尽量不调用OpenCV函数的情况下编写,其目的是熟悉图像处理原理和Python编程,注释很少,其中RGB转HSV原理,HSV转RGB原理,在CSDN中都能找到,灰度图替换HSV中的V原理其实很简单,看代码就能明白,不用再找资料。
总结
以上所述是小编给大家介绍的Python+OpenCV实现图像融合的原理及代码网站的支持!
来源:https://blog.csdn.net/Skymelu/article/details/84767689
标签:python,图像融,opencv
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
教你快速掌握 MySQL数据库中触发器的应用
2008-12-03 15:33:00
python中的classmethod与staticmethod
2021-07-14 00:43:29
![](https://img.aspxhome.com/file/2023/4/70234_0s.png)
python 实现敏感词过滤的方法
2022-08-09 10:22:51
javascript面向对象三大特征之封装实例详解
2023-08-23 21:39:04
sqlserver自动增长列引起的问题解决方法
2011-10-24 19:37:28
教程:MySQL中多表操作和批处理方法
2009-07-30 08:20:00
python调用cmd复制文件代码分享
2022-12-26 11:18:22
利用python/R语言绘制圣诞树实例代码
2021-02-10 02:32:23
![](https://img.aspxhome.com/file/2023/5/93715_0s.png)
python工具之清理 Markdown 中没有引用的图片
2022-02-14 11:44:39
![](https://img.aspxhome.com/file/2023/0/67300_0s.png)
Oracle数据库中通用的函数实例详解
2023-07-08 04:49:00
![](https://img.aspxhome.com/file/2023/0/63370_0s.png)
python socket多线程实现客户端与服务器连接
2021-09-06 15:44:01
![](https://img.aspxhome.com/file/2023/4/79784_0s.jpg)
css学习笔记: css新闻列表的特殊做法
2009-07-19 14:25:00
![](https://img.aspxhome.com/file/UploadPic/20097/19/11e89610908g215-71s.jpg)
14个出色的jQuery导航菜单实例教程
2009-12-31 17:23:00
![](https://img.aspxhome.com/file/UploadPic/20101/11/094104n8w-71s.jpg)
python小白切忌乱用表达式
2021-08-11 19:57:11
Golang 使用http Client下载文件的实现方法
2023-07-21 07:32:23
Python脚本处理空格的方法
2021-03-12 09:45:33
![](https://img.aspxhome.com/file/2023/6/84106_0s.png)
Pytorch自动求导函数详解流程以及与TensorFlow搭建网络的对比
2023-07-08 18:44:37
![](https://img.aspxhome.com/file/2023/0/95860_0s.png)
怎样从旧版本SQL Server中重新存储数据
2009-01-15 13:23:00
浅谈Oracle数据库的建模与设计
2010-07-20 12:55:00
python基础之错误和异常处理
2021-07-28 05:46:15
![](https://img.aspxhome.com/file/2023/3/65933_0s.png)