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下如何让web元素的生成更简单的分析
Jul 17 Python
纯python实现机器学习之kNN算法示例
Mar 01 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
Mar 04 Python
Python延时操作实现方法示例
Aug 14 Python
Python 实现子类获取父类的类成员方法
Jan 11 Python
python async with和async for的使用
Jun 20 Python
Python3实现将一维数组按标准长度分隔为二维数组
Nov 29 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
解决 jupyter notebook 回车换两行问题
Apr 15 Python
详解Pytorch显存动态分配规律探索
Nov 17 Python
Django通过设置CORS解决跨域问题
Nov 26 Python
Python 使用dict实现switch的操作
Apr 07 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 self与$this的详解
2013/06/08 PHP
joomla jce editor 解决上传中文名文件失败问题
2013/06/09 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
HR vs CL BO3 第二场 2.13
2021/03/10 DOTA
Ext对基本类型的扩展 ext,extjs,format
2010/12/25 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
2014/07/06 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
浅析Python中的for 循环
2016/06/09 Python
Python3.4实现远程控制电脑开关机
2018/02/22 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
Python 实现两个列表里元素对应相乘的方法
2018/11/14 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
Pytorch之保存读取模型实例
2019/12/30 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
迟到检讨书800字
2014/01/13 职场文书
大学生自我鉴定范文模板
2014/01/21 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
你离财务总监还有多远?速览CFO的岗位职责
2019/11/18 职场文书
Python编写冷笑话生成器
2022/04/20 Python