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

  

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

  

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

  

<>强融合原理为:

  

1注意:遥感原图像RGB图和灰度图Grayimage为测试用的输入图像;

  

2步骤:(1)将RGB转换为HSV空间(H:色调,年代:饱和度,V:明度),

  

(2)用灰色图像诶换掉HSV中V的;

  

(3)替换后的HSV转换回RGB空间即可得到结果。

  

书上只介绍了HSI彩色模型,并没有说到HSV,所以需要网上查找资料。

  

Python代码如下:

        进口cv2   进口numpy np   导入数学   从matplotlib进口pyplot plt   def caijian (img): #裁剪图像与否根据选择图像大小而定,调用了OpenCV函数   重量=img.shape [0]   身高=img.shape [1]   打印(“图像大小为:% d * % d %(体重、身高))   img=cv2.resize (img (int(重量/2),int(身高/2)),插值=cv2.INTER_CUBIC)   返回(img)   def graytograyimg (img):   grayimg=img1   重量=img.shape [0]   身高=img.shape [1]   因为我在范围(重量):   j的范围(高度):   grayimg (i, j)=0.299 img (i, j, 0) + 0.587 img (i, j, 1) + 0.114 img (i, j, 2)   返回(grayimg)   def RGBtoHSV (img):   b, g, r=cv2.split (img)   行,关口=b.shape   H=np.ones(行,关口,“浮动”)   S=np.ones(行,关口,“浮动”)   V=np.ones(行,关口,“浮动”)   打印(“RGB图像大小:% d * % d %(行,峡路))   因为我在范围(0,行):   j的范围(0,峡路):   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   如果V (i, j) 0:   年代(i, j)=0   其他:   S (i, j)=(V (i, j)分钟)/V (i, j)   如果最大最小:   H (i, j)=0 #如果rgb三向量相同,色调为黑   elif V (i, j)==r (i, j):   H (i, j)=(60 *(浮动(g (i, j)) - b (i, j))/(V (i, j)分钟))   elif V (i, j)==g (i, j):   H (i, j)=60 *(浮动(b) (i, j) - r (i, j))/(V (i, j)分钟)+ 120   elif V (i, j)==b (i, j):   H (i, j)=60 *(浮动(r (i, j)) - g (i, j))/(V (i, j)分钟)+ 240   如果H (i, j) & lt; 0:   H (i, j)=H (i, j) + 360   H (i, j)=H (i, j)/2   (i, j)=255 *年代(i, j)   结果=cv2.merge ((H, S, V)) # cv2.merge函数是合并单通道成多通道   结果=np.uint8(结果)   返回(结果)   def graytoHSgry (grayimg HSVimg):   H, S, V=cv2.split (HSVimg)   行,关口=V.shape   因为我在范围内(行):   j的范围(峡路):   V (i, j)=grayimg[我][j] [0]   newimg=cv2.merge ([H, S, V])   newimg=np.uint8 (newimg)   返回newimg   def HSVtoRGB (img, rgb):   h2, s1, v1=cv2.split (img)   rg=rgb.copy ()   行,关口=h2.shape   r, g, b=0.0, 0.0, 0.0   b1, g1, r1=cv2.split (rg)   打印(HSV图像大小为:% d * % d %(行,峡路))   因为我在范围内(行):   j的范围(峡路):   h=h2[我][j]   v=v1[我][j]/255   s=s1[我][j]/255   h=h3   hx=int (h/60.0)   你好=hx % 6   f=hx-hi   p=v (1)   q=v *(行进)   v t=(1 -(行进))   如果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[我][j]=int®   g1[我][j]=int (g)   b1[我][j]=int (b)   rg=cv2.merge ((b1, g1, r1))   返回rg   img=cv2.imread (“D:/RGB.bmp”)   灰色=cv2.imread (“D:/gray.bmp”)   img=caijian (img)   灰色=caijian(灰色)   grayimg=graytograyimg(灰色)   HSVimg=RGBtoHSV (img)   HSgray=graytoHSgry (grayimg HSVimg)   RGBimg=HSVtoRGB (HSgray img)   cv2.imshow(“形象”,img)   grayimg cv2.imshow (“Grayimage”)   HSVimg cv2.imshow (“HSVimage”)   HSgray cv2.imshow (“HSGrayimage”)   RGBimg cv2.imshow (“RGBimage”)   cv2.waitKey (0)   cv2.destroyAllWindows ()      

以上代码是在尽量不调用OpenCV函数的情况下编写,其目的是熟悉图像处理原理和Python编程,注释很少,其中RGB转HSV原理,HSV转RGB原理,在CSDN中都能找的到,灰度图替换HSV中V的原理其实很简单,看代码就能明白,不用再找资料。

  

  

以上所述是小编给大家介绍的Python + OpenCV实现图像融合的原理及代码,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

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