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 FTP操作类代码分享
May 13 Python
Windows下安装Scrapy
Oct 17 Python
Python3实现统计单词表中每个字母出现频率的方法示例
Jan 28 Python
Django web框架使用url path name详解
Apr 29 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
May 10 Python
pyQt5实时刷新界面的示例
Jun 25 Python
django Admin文档生成器使用详解
Jul 22 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
Feb 17 Python
Python定时从Mysql提取数据存入Redis的实现
May 03 Python
keras 多gpu并行运行案例
Jun 10 Python
matplotlib交互式数据光标实现(mplcursors)
Jan 13 Python
pytorch交叉熵损失函数的weight参数的使用
May 24 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网页后退不再出现过期
2007/03/08 PHP
PHP自定义大小验证码的方法详解
2013/06/07 PHP
PHP json_decode函数详细解析
2014/02/17 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
WordPress分页伪静态加html后缀
2016/06/08 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
2016/10/28 PHP
Yii框架用户登录session丢失问题解决方法
2017/01/07 PHP
Jquery异步请求数据实例代码
2011/12/28 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
超级简单实现JavaScript MVC 样式框架
2015/03/24 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
jQuery用FormData实现文件上传的方法
2016/11/21 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
React Native自定义控件底部抽屉菜单的示例
2018/02/08 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
举例讲解Python中装饰器的用法
2015/04/27 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
Pandas之MultiIndex对象的示例详解
2019/06/25 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
戴尔英国翻新电脑和电子产品:Dell UK Refurbished Computers
2019/07/30 全球购物
巴西购物网站:Submarino
2020/01/19 全球购物
工厂搬迁方案
2014/05/11 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
导游词300字
2015/02/13 职场文书
2015年党小组工作总结
2015/05/26 职场文书
Python将CSV文件转化为HTML文件的操作方法
2021/06/30 Python