赞
踩
- '''
- 【OpenCV入门教程之四】 ROI区域图像叠加&初级图像混合 全剖析
- 参考作者:浅墨_毛星云
- 一、设定感兴趣区域——ROI(region of interest)
- 在图像处理领域,我们常常需要设置感兴趣区域(ROI,region of interest),来专注或者简化我们的工作过程 。
- 也就是从图像中选择的一个图像区域,这个区域是我们图像分析所关注的重点。我们圈定这个区域,以便进行进一步处理。
- 而且,使用ROI指定我们想读入的目标,可以减少处理时间,增加精度,给图像处理来带不小的便利。
- '''
- import cv2
- import numpy as np
-
- img3 = cv2.imread("3.jpg")
- img4 = cv2.imread("4.jpg")
- # img3 = cv2.resize(img1,(int(img1.shape[1]/5.0), int(img1.shape[0]/5.0))) #原始图片太大,重新裁剪一下
- # img4 = cv2.resize(img4,(int(img4.shape[1]/2.5), int(img4.shape[0]/2.5))) #原始图片太大,重新裁剪一下
- #cv2.imwrite("3.jpg", img3)
- # cv2.imwrite("4.jpg", img4)
-
- #现在是img4比较小,想讲img4加到img3上去
-
- rows, cols, channels = img4.shape
- rows3, cols3, channels3 = img3.shape
- roi = img3[0:rows, 0:cols]
- img4gray = cv2.cvtColor(img4, cv2.COLOR_BGR2GRAY)
- ret,mask=cv2.threshold(img4gray,175,255,cv2.THRESH_BINARY)
- # cv2.imshow("mask:", mask)
- mask_inv = cv2.bitwise_not(mask) #把img4的区域取反,按位运算
- # cv2.imshow("mask_inv:", mask_inv)
- img3_bg = cv2.bitwise_and(roi, roi, mask=mask) #抠图区进行掩模保护,留下抠图图片
- cv2.imshow("img3_bg:", img3_bg)
- img4_fg = cv2.bitwise_and(img4,img4,mask=mask_inv)
- cv2.imshow("img4_fg:", img4_fg)
- dst = cv2.add(img3_bg,img4_fg)
- img3[rows3-rows-30:rows3-30, cols3-cols-30:cols3-30] =dst
- cv2.imshow("dst in img3:", img3)
-
-
- '''
- 二、初级图像混合——线性混合操作
- 我们通过在范围0到1之间改变alpha值,来对两幅图像或两段视频产生时间上的画面叠化(cross-dissolve)效果,就像幻灯片放映和电影制作中的那样。
- 即在幻灯片翻页时设置的前后页缓慢过渡叠加效果,以及电影情节过渡时经常出现的画面叠加效果。
- '''
- img5 = cv2.imread("1.jpg")
- h,w,_ = img3.shape
- imgnew = cv2.resize(img4, (w,h), interpolation=cv2.INTER_AREA) #两张图片需是大小相同的
- alpha = 0.5 #将两张图片叠加在一起第一张图片的权重
- beta = 1 - alpha #第二张图片的权重
- gamma = 0 #一个加到权重总和上的标量值,dst = src1*alpha+ src2*beta + gamma;
- img_add = cv2.addWeighted(img3, alpha, imgnew, beta, gamma)
- # cv2.imshow("img_add:", img_add)
-
- cv2.waitKey()
- cv2.destroyAllWindows()
-
- '''
- cv2.add()是将两张图片叠加在一起的,会挡住下面图片的某一部分的
- cv2.addWeighted是将两张图片进行融合
- '''
add操作的结果如下:
add_weighted结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。