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 相关文章推荐
easy_install python包安装管理工具介绍
Feb 10 Python
Python批量修改文件后缀的方法
Jan 26 Python
从零学python系列之新版本导入httplib模块报ImportError解决方案
May 23 Python
python在windows命令行下输出彩色文字的方法
Mar 19 Python
在Python中通过threading模块定义和调用线程的方法
Jul 12 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
Oct 11 Python
Python实现一个服务器监听多个客户端请求
Apr 12 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 Python
Python函数式编程实例详解
Jan 17 Python
python时间序列数据转为timestamp格式的方法
Aug 03 Python
Python装饰器如何实现修复过程解析
Sep 05 Python
图文详解matlab原始处理图像几何变换
Jul 09 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
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
php上传文件常见问题总结
2015/02/03 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
Python数据结构与算法之图结构(Graph)实例分析
2017/09/05 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
Python GUI编程 文本弹窗的实例
2019/06/11 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
Django使用rest_framework写出API
2020/05/21 Python
Python list和str互转的实现示例
2020/11/16 Python
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
应届生体育教师自荐信
2013/10/03 职场文书
临床医学应届生求职信
2013/11/06 职场文书
2013年保送生自荐信格式
2013/11/20 职场文书
经贸日语专业个人求职信范文
2013/12/28 职场文书
岗位竞聘演讲稿
2014/01/10 职场文书
酒店采购员岗位职责
2014/03/14 职场文书
航海技术专业毕业生求职信
2014/04/06 职场文书
2014年党课学习材料
2014/05/11 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
2014镇党委班子对照检查材料思想汇报
2014/09/23 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
pytorch常用数据类型所占字节数对照表一览
2021/05/17 Python
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
如何使用pdb进行Python调试
2021/06/30 Python