opencv python 轮廓抠图粘贴到另外一张图像上 您所在的位置:网站首页 钢笔怎么抠图粘到另一张图上 opencv python 轮廓抠图粘贴到另外一张图像上

opencv python 轮廓抠图粘贴到另外一张图像上

2023-07-29 00:22| 来源: 网络整理| 查看: 265

主要用到:opencv-python numpy

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_hinputImg_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 = [np.zeros((len(contourData), 2), int)] 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 triangles_list[0][:, 0] = contourData[:, 0] +drawPosition[0] triangles_list[0][:, 1] = contourData[:, 1] +drawPosition[1] outContourData=triangles_list[0] return outPutImg,outContourData#,outRectData if(__name__=="__main__"): imgStr=r'E:\Maidipu\originalSVS\test\input.jpg' imgMaskStr = r'E:\Maidipu\originalSVS\test\mask.jpg' img=cv2.imread(imgStr) maskImg=cv2.imread(imgMaskStr) contourData=np.array([(57,7),(107,30),(107,120),(62,122),(2,95),(9,32)]) outPutImg,outContourData=mergeImg(img, maskImg, contourData, (10,10)) #print(outPutImg) cv2.imshow('2',outPutImg) cv2.imshow('3', maskImg) cv2.waitKey(0)

效果如下:左边小图轮廓(轮廓点这里我是用到手工获取不太准,可以结合计算轮廓算法达到精准绘制)以内的图像粘贴到右图上

车辆,车牌,反光衣,安全帽等数据集,链接,有兴趣的朋友可以看下 链接:链接:https://pan.baidu.com/s/1mG7X71rngtWqP2tsfFm26A 提取码:5555



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有