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中关于时间和日期函数的常用计算总结(time和datatime)
Mar 08 Python
Python文件和目录操作详解
Feb 08 Python
Python环境变量设置方法
Aug 28 Python
Django中login_required装饰器的深入介绍
Nov 24 Python
Django中使用第三方登录的示例代码
Aug 20 Python
python 对类的成员函数开启线程的方法
Jan 22 Python
基于python的ini配置文件操作工具类
Apr 24 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
用python中的matplotlib绘制方程图像代码
Nov 21 Python
Python os模块常用方法和属性总结
Feb 20 Python
Python爬虫之自动爬取某车之家各车销售数据
Jun 02 Python
PO模式在selenium自动化测试框架的优势
Mar 20 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 图片上传实现代码 带详细注释
2010/04/29 PHP
php获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
简单谈谈php中的unicode和utf8编码
2015/06/10 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
php解决约瑟夫环算法实例分析
2019/09/30 PHP
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
javascript+html5实现仿flash滚动播放图片的方法
2015/04/27 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
2017/10/23 Javascript
基于 Vue 实现一个酷炫的 menu插件
2017/11/14 Javascript
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
2020/10/14 Javascript
[40:27]完美世界DOTA2联赛PWL S3 PXG vs GXR 第一场 12.19
2020/12/24 DOTA
Python中使用中文的方法
2011/02/19 Python
python调用摄像头显示图像的实例
2018/08/03 Python
Python字符串逆序输出的实例讲解
2019/02/16 Python
Python一个简单的通信程序(客户端 服务器)
2019/03/06 Python
扩展Django admin的list_filter()可使用范围方法
2019/08/21 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
2019/09/25 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
服装公司总经理岗位职责
2013/11/30 职场文书
建筑班组长岗位职责
2014/01/02 职场文书
护士自我评价范文
2014/01/25 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
保证书范文大全
2014/04/28 职场文书
2014年体育工作总结
2014/11/24 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
干货:如何写好工作计划!
2019/05/17 职场文书