ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

将一张图像贴到另一张图像指定区域

2022-02-27 16:01:48  阅读:153  来源: 互联网

标签:inputImg 一张 cv2 贴到 shape drawPosition 图像 maskImg array


import cv2
import numpy as np


def mergeImg(inputImg, maskImg, contourData, drawPosition):
    '''
    :param inputImg: 输入的图像
    :param maskImg: 输入的模板图像
    :param contourData: 输入的模板中轮廓数据 numpy 形式如[(x1,y1),(x2,y2),...,]
    :param drawPosition: (x,y) 大图中要绘制模板的位置,以maskImg左上角为起始点
    :return: outPutImg:输出融合后的图像
             outContourData: 输出轮廓在inputImg的坐标数据
             outRectData: 输出轮廓的矩形框在inputImg的坐标数据
    '''
    # 通道需要相等
    if (inputImg.shape[2] != maskImg.shape[2]):
        print("inputImg shape != maskImg shape")
        return
    inputImg_h = inputImg.shape[0]
    inputImg_w = inputImg.shape[1]
    maskImg_h = maskImg.shape[0]
    maskImg_w = maskImg.shape[1]
    # inputImg图像尺寸不能小于maskImg
    if (inputImg_h < maskImg_h or inputImg_w < maskImg_w):
        print("inputImg size < maskImg size")
        return
    # 画图的位置不能超过原始图像
    if (((drawPosition[0] + maskImg_w) > inputImg_w) or ((drawPosition[1] + maskImg_h) > inputImg_h)):
        print("drawPosition + maskImg > inputImg range")
        return
    outPutImg = inputImg.copy()
    input_roi = outPutImg[drawPosition[1]:drawPosition[1] + maskImg_h, drawPosition[0]:drawPosition[0] + maskImg_w]
    imgMask_array = np.zeros((maskImg_h, maskImg_w, maskImg.shape[2]), dtype=np.uint8)
    triangles_list = [contourData]

    cv2.fillPoly(imgMask_array, triangles_list, color=(1, 1, 1))
    cv2.fillPoly(input_roi, triangles_list, color=(0, 0, 0))
    # cv2.imshow('imgMask_array', imgMask_array)
    imgMask_array = imgMask_array * maskImg
    output_ori = input_roi + imgMask_array
    outPutImg[drawPosition[1]:drawPosition[1] + maskImg_h, drawPosition[0]:drawPosition[0] + maskImg_w] = output_ori

    return outPutImg


if (__name__ == "__main__"):
    #原图
    imgStr = r'img/1634081248.020272.jpg'
    #篡改后的车牌图像
    imgMaskStr = r'plate.png'
    img = cv2.imread(imgStr)
    maskImg = cv2.imread(imgMaskStr)
    # w,h裁剪下来的原车牌size
    w=189
    h=66
    maskImg=cv2.resize(maskImg,(w,h))
    print(maskImg.shape[1])
    contourData = np.array([(0,0),(maskImg.shape[1],0),(maskImg.shape[1],maskImg.shape[0]),(0,maskImg.shape[0])])
    #贴图的起始点,原车牌图像目标框的左上角点
    x1=1668
    y1=1360
    outPutImg= mergeImg(img, maskImg, contourData, (x1,y1))
    cv2.imwrite('result.png', outPutImg)

 

标签:inputImg,一张,cv2,贴到,shape,drawPosition,图像,maskImg,array
来源: https://www.cnblogs.com/h694879357/p/15942538.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有