opencv——将2张图片合并

效果演示:

opencv——将2张图片合并_第1张图片

带有绿幕的图片的狮子提取出来,放到另一种风景图片里!

1. 首先我们要先口出绿色绿幕,比如:

 opencv——将2张图片合并_第2张图片

这里将绿色绿色绿幕先转为HSV,通过修改颜色的明暗度,抠出狮子的轮廓。

代码 :

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
def showImg(img):
    img1 = cv.cvtColor(img, cv.COLOR_BGR2RGB)
    plt.imshow(img1)
img = cv.imread("img/lion.jpg", cv.IMREAD_COLOR)

img_copy =  img.copy()

# 将BGR格式转为 HSV
hsv_img = cv.cvtColor(img_copy, cv.COLOR_BGR2HSV)

lowerb_val = (35,43, 46)
upperb_val = (77, 255, 255)
# 查找颜色
mask_img =  cv.inRange(hsv_img, lowerb_val, upperb_val)
showImg(mask_img)

说明:这里的颜色需要通过下面的列表,查找一下:

opencv——将2张图片合并_第3张图片 

2.  通过轮廓反向获取狮子

opencv——将2张图片合并_第4张图片 

代码:

img_copy[mask_img != 0] = (0,0,0)
showImg(img_copy)

说明: 这里的意思是说 获取不是黑色颜色的部分,并且其它背景为黑色。

3.  使两张图片融合

opencv——将2张图片合并_第5张图片

代码:

img_it = cv.imread("img/yunduo.png", cv.IMREAD_COLOR)

height,width = img_it.shape[0:2]

mask_rgb_img = cv.cvtColor(mask_img, cv.COLOR_BGR2RGB)

srt_img = np.zeros_like(img_it)

for row in range(height):
    for col in range(width):
        
        b,g,r = img_it[row,col]
        
        b1,g1,r1 = mask_rgb_img[row,col]
        
        b2,g2,r2 = img_copy[row,col]
        
        if b1 != 255 and g1 != 255 and r1 !=255:
            b = b2
            g = g2
            r = r2
        srt_img[row,col] = (b,g,r)

fig = plt.figure(figsize=(20,17))
fig.add_subplot(1,3,1)
showImg(img)
fig.add_subplot(1,3,2)
showImg(img_copy)
fig.add_subplot(1,3,3)
showImg(srt_img)

 说明:这里是分开了3原色,并且分开判断是否为255,不是255.者将这块区域替换成狮子的部分。

 

你可能感兴趣的:(机器学习Opencv,opencv,人工智能,计算机视觉)