根据导师作业安排,在学习数字图像处理(刚萨雷斯版)第六章彩色图像处理中的彩色模型后,导师安排了一个比较有趣的作业:
<>强融合原理为:强>
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实现图像融合的原理及代码,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!