Python+OpenCV实现图像融合的原理及代码


Posted in Python onDecember 03, 2018

根据导师作业安排,在学习数字图像处理(刚萨雷斯版)第六章 彩色图像处理 中的彩色模型后,导师安排了一个比较有趣的作业:

Python+OpenCV实现图像融合的原理及代码

融合原理为:

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实现图像融合的原理及代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python安装mysql-python简明笔记(ubuntu环境)
Jun 25 Python
详谈Python基础之内置函数和递归
Jun 21 Python
Python开发的HTTP库requests详解
Aug 29 Python
浅谈Python黑帽子取代netcat
Feb 10 Python
python2.7读取文件夹下所有文件名称及内容的方法
Feb 24 Python
利用rest framework搭建Django API过程解析
Aug 31 Python
Python 实现文件读写、坐标寻址、查找替换功能
Sep 11 Python
tensorflow模型继续训练 fineturn实例
Jan 21 Python
Pytorch maxpool的ceil_mode用法
Feb 18 Python
Python post请求实现代码实例
Feb 28 Python
python继承threading.Thread实现有返回值的子类实例
May 02 Python
Django静态资源部署404问题解决方案
May 11 Python
浅谈python脚本设置运行参数的方法
Dec 03 #Python
Linux 修改Python命令的方法示例
Dec 03 #Python
解决Python一行输出不显示的问题
Dec 03 #Python
解决vscode python print 输出窗口中文乱码的问题
Dec 03 #Python
pycharm运行程序时在Python console窗口中运行的方法
Dec 03 #Python
Python小工具之消耗系统指定大小内存的方法
Dec 03 #Python
使用memory_profiler监测python代码运行时内存消耗方法
Dec 03 #Python
You might like
php 不同编码下的字符串长度区分
2009/09/26 PHP
Yii框架中sphinx索引配置方法解析
2016/10/18 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
新鲜出炉的js tips提示效果
2011/04/03 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
jquery控制显示服务器生成的图片流
2015/08/04 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
如何使用vuejs实现更好的Form validation?
2017/04/07 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
js 图片懒加载的实现
2020/10/21 Javascript
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
Python脚本实现自动发带图的微博
2016/04/27 Python
浅析Python四种数据类型
2018/09/26 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
Pandas实现一列数据分隔为两列
2020/05/18 Python
python温度转换华氏温度实现代码
2020/12/06 Python
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
大学生职业生涯规划范文
2014/01/22 职场文书
最新奶茶店创业计划书
2014/01/25 职场文书
公司门卫岗位职责
2014/03/15 职场文书
项目合作协议书
2014/04/16 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书
就业意向书范本
2015/05/11 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
电影开国大典观后感
2015/06/04 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python
Python实现对齐打印 format函数的用法
2022/04/28 Python