zoukankan      html  css  js  c++  java
  • 生成马赛克图片并且在对应的标签中添加mask区域,用于二值图训练

     1 import cv2
     2 import os
     3 import numpy as np
     4 # 只需要调整neighbor 越大马赛克的单位块越大
     5 def do_mosaic(frame, x, y, w, h, neighbor=12):
     6     """
     7     马赛克的实现原理是把图像上某个像素点一定范围邻域内的所有点用邻域内左上像素点的颜色代替,这样可以模糊细节,但是可以保留大体的轮廓。
     8     :param frame: opencv frame
     9     :param int x :  马赛克左顶点
    10     :param int y:  马赛克右顶点
    11     :param int w:  马赛克宽
    12     :param int h:  马赛克高
    13     :param int neighbor:  马赛克每一块的宽
    14     """
    15     fh, fw = frame.shape[0], frame.shape[1]
    16     if (y + h > fh) or (x + w > fw):
    17         print()
    18         return
    19     for i in range(0, h - neighbor, neighbor):  # 关键点0 减去neightbour 防止溢出
    20         for j in range(0, w - neighbor, neighbor):
    21             rect = [j + x, i + y, neighbor, neighbor]
    22             color = frame[i + y][j + x].tolist()  # 关键点1 tolist
    23             left_up = (rect[0], rect[1])
    24             right_down = (rect[0] + neighbor - 1, rect[1] + neighbor - 1)  # 关键点2 减去一个像素
    25             cv2.rectangle(frame, left_up, right_down, color, -1)
    26     return frame
    27 
    28 # 原图路径
    29 oriRoot = r"D:jianfengaligenerateMaskpic"
    30 # mask路径
    31 maskRoot = r"D:jianfengaligenerateMaskmask"
    32 pics = os.listdir(oriRoot)
    33 for pic in pics:
    34     # im = cv2.imread("81.jpg", 1)
    35     im = cv2.imread(os.path.join(oriRoot, pic), 1)
    36 
    37     print(os.path.join(oriRoot, pic))
    38     print(im)
    39     imMask = cv2.imread(os.path.join(maskRoot, pic.split(".")[0]+".png"), 1)
    40     hPic = im.shape[0]
    41     wPic = im.shape[0]
    42     x = np.random.randint(20, hPic-500)
    43     y = np.random.randint(20, wPic-500)
    44     w = np.random.randint(20, 400)
    45     h = np.random.randint(20, 400)
    46     imnew = do_mosaic(im, x, y, w, h)
    47     print(imnew)
    48     imMask[y:y+h, x:x+w] = 255
    49 
    50     # show
    51     cv2.imshow('mosaic', cv2.resize(imnew, (500, 500)))
    52     cv2.imshow('mosaicMask', cv2.resize(imMask, (500, 500)))
    53     cv2.waitKey(0)
  • 相关阅读:
    node版本切换工具n的使用介绍
    nrm -- npm镜像源管理
    npm vs npx
    Dnsmasq MacOS使用介绍
    Java动态生成类以及动态添加属性
    mysql表名忽略大小写问题记录
    psotgresql之大小写
    java 按字节读写二进制文件(Base64编码解码)
    java解析复杂json:JSONObject 和 JSONArray的使用
    URL编码:怎样读取特殊字符
  • 原文地址:https://www.cnblogs.com/bob-jianfeng/p/14007343.html
Copyright © 2011-2022 走看看