利用opencv添加mask

第一种做法: 

import os
import sys
import random
import math
import numpy as np
import skimage.io
import matplotlib
import matplotlib.pyplot as plt
import cv2
import colorsys
os.environ['CUDA_VISIBLE_DEVICES'] = '1'
# Root directory of the project
ROOT_DIR = os.path.abspath("./")
print(ROOT_DIR)
# Import Mask RCNN
sys.path.append(ROOT_DIR)  # To find local version of the library
from mrcnn import utils
import mrcnn.model as modellib
from mrcnn import visualize
# # Import COCO config
sys.path.append(os.path.join(ROOT_DIR, "samples/coco/"))  # To find local version
import coco# Directory to save logs and trained model
MODEL_DIR = os.path.join(ROOT_DIR, "logs")# Local path to trained weights file
COCO_MODEL_PATH = os.path.join(ROOT_DIR, "mask_rcnn_coco.h5")
print(COCO_MODEL_PATH)IMAGE_DIR = os.path.join(ROOT_DIR, "images")class InferenceConfig(coco.CocoConfig):# Set batch size to 1 since we'll be running inference on# one image at a time. Batch size = GPU_COUNT * IMAGES_PER_GPUGPU_COUNT = 1IMAGES_PER_GPU = 1config = InferenceConfig()
config.display()def random_colors(N, bright=True):"""Generate random colors.To get visually distinct colors, generate them in HSV space thenconvert to RGB."""brightness = 1.0 if bright else 0.7hsv = [(i / N, 1, brightness) for i in range(N)]colors = list(map(lambda c: colorsys.hsv_to_rgb(*c), hsv))random.shuffle(colors)return colors
def apply_mask(image, mask,color,alpha=0.5):"""Apply the given mask to the image."""for c in range(3):image[:, :, c] = np.where(mask == 1,image[:, :, c] *(1 - alpha) + alpha*color[c]* 255,image[:, :, c])return image
def load_model():model = modellib.MaskRCNN(mode="inference", model_dir=MODEL_DIR, config=config)# Load weights trained on MS-COCOmodel.load_weights(COCO_MODEL_PATH, by_name=True)# COCO Class names# Index of the class in the list is its ID. For example, to get ID of# the teddy bear class, use: class_names.index('teddy bear')class_names = ['BG', 'person', 'bicycle', 'car', 'motorcycle', 'airplane','bus', 'train', 'truck', 'boat', 'traffic light','fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird','cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear','zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie','suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball','kite', 'baseball bat', 'baseball glove', 'skateboard','surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup','fork', 'knife', 'spoon', 'bowl', 'banana', 'apple','sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza','donut', 'cake', 'chair', 'couch', 'potted plant', 'bed','dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote','keyboard', 'cell phone', 'microwave', 'oven', 'toaster','sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors','teddy bear', 'hair drier', 'toothbrush']# file_names = next(os.walk(IMAGE_DIR))[2]file_names=['3627527276_6fe8cd9bfe_z.jpg']image = cv2.imread(os.path.join(IMAGE_DIR, random.choice(file_names)))# Run detectionresults = model.detect([image], verbose=1)# Visualize resultsr = results[0]print(r['rois'])print('======================')print(np.array(r['masks']).shape)print('========================')print(r['class_ids'])print('========================')print(r['scores'])# visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'],#                         class_names, r['scores'],ax=False)boxes=r['rois']masks=r['masks']class_ids=r['class_ids']scores=r['scores']N = r['rois'].shape[0]colors = random_colors(N)print('colors=', colors)for i in range(N):ymin, xmin, ymax, xmax = boxes[i]print(boxes[i])color = colors[i]# Maskmask = masks[:, :, i]image = apply_mask(image, mask, color)# add textclass_id = class_ids[i]score = scores[i] if scores is not None else Nonelabel = class_names[class_id]caption = "{} {:.3f}".format(label, score) if score else labelcv2.putText(image, caption, (xmin, ymin + 8), cv2.FONT_HERSHEY_SIMPLEX, 0.3, color=(255, 255, 255), thickness=1)cv2.rectangle(image, (xmin, ymin), (xmax, ymax), (255, 0, 0), 2)cv2.imwrite('1.jpg', image)
if __name__ == '__main__':load_model()


注意np.where的妙用,其中r['masks']是(none,none,4)的ndarray形式的mask,通过取每一个channel盖在原图片上。 

第二种做法:

#coding:utf-8
import numpy as np
import matplotlib.pyplot as plt
import cv2
import imutils
from matplotlib.patches import Polygon
import osdef get_contour(image_mask,black_mask,image,color):global dummy_mask,line_maskimage_thre = cv2.threshold(image* 255, 127, 255, cv2.THRESH_BINARY)[1]# cnts=cv2.findContours(#     image_thre.copy(), cv2.RETR_CCOMP, cv2.CHAIN_APPROX_NONE)# print('cnts=',cnts.shape)cnts = cv2.findContours(image_thre, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)contours = cnts[0] if imutils.is_cv2() else cnts[1]c_ = sorted(contours, key=cv2.contourArea, reverse=True)for i in c_:if i.shape[0]>120:pig_cnt = np.squeeze(i)"""change color"""line_mask=cv2.drawContours(image_mask, [pig_cnt], -1, color, 5, cv2.LINE_AA)fill_mask=cv2.drawContours(black_mask, [pig_cnt], 0, (0,0,240), thickness=cv2.FILLED)# dummy_mask=cv2.add(line_mask,fill_mask)dummy_mask = cv2.addWeighted(line_mask,1., fill_mask,0.4,0)# dummy_mask = cv2.drawContours(dummy_mask, [pig_cnt], 0, (random_b, random_g, random_r), thickness=cv2.FILLED)return dummy_mask
def get_channel_color(channels):color_dict={}for i in range(channels):random_b = int(np.random.randint(0, 255, 1)[0])random_g = int(np.random.randint(0, 255, 1)[0])random_r = int(np.random.randint(0, 255, 1)[0])color_dict[i]=(random_b,random_g,random_r)return color_dictdef pig_contour():img_path='./image_low_clear'show_path='./show_low_clear'output_path='./image_mask_low_clear'if not os.path.exists(output_path):os.mkdir(output_path)show_list_path = [os.path.join(show_path, i) for i in os.listdir(show_path)]channels_list=[]for i in show_list_path:channel=np.load(i).shape[-1]channels_list.append(channel)channel=max(channels_list)print('channel=',channel)color_dict = get_channel_color(channels=channel)imgs_list_path = [os.path.join(img_path, i) for i in os.listdir(img_path)]for i,img_list_path in enumerate(imgs_list_path):pig_mask_list_path = show_path+'/'+img_list_path.split('/')[-1].replace('jpg','npy')print('img_list_path=',img_list_path)print('pig_mask_list_path=',pig_mask_list_path)if pig_mask_list_path.split('/')[-1] in os.listdir(show_path):pig_mask = np.load(pig_mask_list_path)image_h, image_w, channels = pig_mask.shapeblack_mask = np.zeros((image_h, image_w, 3),dtype=np.float32)image=cv2.imread(img_list_path)image_mask=image.astype(np.float32)for i in range(channels):global dummy_mask# print('i=',i)dummy_mask=get_contour(image_mask,black_mask, pig_mask[..., i],color=color_dict[i])cv2.imwrite(output_path+'/'+img_list_path.split('/')[-1], dummy_mask)def unlock_mv(sp):""" 将视频转换成图片sp: 视频路径 """cap = cv2.VideoCapture(sp)suc = cap.isOpened()  # 是否成功打开frame_count = 0while suc:frame_count += 1suc, frame = cap.read()params = []params.append(2)  # params.append(1)cv2.imwrite('mv\\%d.jpg' % frame_count, frame, params)cap.release()print('unlock image: ', frame_count)# 图片转视频
def jpg_video():""" 将图片合成视频. sp: 视频路径,fps: 帧率 """image_path = './image_mask_low_clear'images_list_path=[os.path.join(image_path,i) for i in os.listdir(image_path)]images_list_path=sorted(images_list_path,key=lambda x:int(x.split('/')[-1].split('.')[0]))# print(images_list_path)h,w,_=cv2.imread(images_list_path[0]).shapefps=4fourcc = cv2.VideoWriter_fourcc(*'MJPG')videoWriter = cv2.VideoWriter('predict_low_clear.avi', fourcc, fps, (w, h))  # 最后一个是保存图片的尺寸for i,image_list_path in enumerate(images_list_path):frame = cv2.imread(image_list_path)videoWriter.write(frame)videoWriter.release()#视频转图片 interval是fps加1,如果去合成视频fps==6
def video2frame():video_src_path = "./data/xiaomi8_videos"# video_formats = [".MP4", ".MOV"]          我的数据集都是.mp4所以不需要进行分类判断frame_save_path = "./data/xiaomi8_images/"if not os.path.exists(frame_save_path):os.mkdir(frame_save_path)interval = 5"""将视频按固定间隔读取写入图片:param video_src_path: 视频存放路径:param formats: 包含的所有视频格式:param frame_save_path: 保存路径:param frame_width: 保存帧宽:param frame_height: 保存帧高:param interval: 保存帧间隔:return: 帧图片"""videos = os.listdir(video_src_path)for each_video in videos:print("正在读取视频:", each_video)each_video_name = each_video[:-4]print(each_video_name)if not os.path.exists(frame_save_path + each_video_name):os.mkdir(frame_save_path + each_video_name)each_video_save_full_path = os.path.join(frame_save_path, each_video_name) + "/"each_video_full_path = os.path.join(video_src_path, each_video)cap = cv2.VideoCapture(each_video_full_path)frame_index = 0frame_count = 0if cap.isOpened():success = Trueelse:success = Falseprint("读取失败!")while(success):success, frame = cap.read()print("---> 正在读取第%d帧:" % frame_index, success)      # 我的是Python3.6if frame_index % interval == 0 and success:     # 如路径下有多个视频文件时视频最后一帧报错因此条件语句中加and success# resize_frame = cv2.resize(frame, (frame_width, frame_height), interpolation=cv2.INTER_AREA)cv2.imwrite(each_video_save_full_path + "%d.png" % frame_count, frame)frame_count += 1frame_index += 1cap.release()if __name__ == '__main__':pig_contour()# jpg_video()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

白宫计划2019年春季发布新版人工智能研究战略

来源:人工智能和大数据近日,据白宫科技政策办公室人工智能助理主任Lynne Parker表示,特朗普政府计划更新由奥巴马政府首次发布的人工智能研究与发展战略。2016年美国国家人工智能研究与发展战略计划概述了美国联邦研究资金的投入重点。2018年…

统计学基本知识四

代码可以参考之前的博客: https://blog.csdn.net/fanzonghao/article/details/85643653 https://blog.csdn.net/fanzonghao/article/details/81637669 声明:文中的图来自于可汗学院公开课,若有侵权,联系我删除。 线性回归&…

Openstack Havana的两个排错过程

问题一:Timeout wating on RPC response, topic:"network" 描述: 启动实例一直等待,然后变为error。查看日志,是 timeout waiting on rpc response, topic "network", method: "validate_networks"…

生活|全民AI时代:干洗店老板、高中生齐上阵

来源:大数据文摘 1975年冬天,旧金山半岛的广告牌上出现了一则有点“奇怪”的消息。“你是否在尝试自己做电脑开发呢?,如果是的话,参加我们的聚会!”这则通告来自当年的Homebrew计算机俱乐部。Homebrew是一…

python可迭代对象,迭代器,生成器

容器是一系列元素的集合,str、list、set、dict、file、sockets对象都可以看作是容器,容器都可以被迭代(用在for,while等语句中),因此他们被称为可迭代对象。 可迭代对象实现了__iter__方法,该方…

软件“吞噬”世界后,我们正在进入“活产品”时代

来源:资本实验室摘要:2011年,网景公司创始人与风险投资家马克安德森提出了一个著名的观点:“软件正在吞噬世界”。虽然他的观点最初聚焦于新一波互联网平台公司的成长,但对物理产品的发展也同样适用,因为现…

python读取与写入json+csv变成coco的json文件+安装labelme

一.python读取与输出json 1.python字典和json互转这里用json.dumps,还原则用json.loads,dumps以后就变为字符串了 import json# info {name: Damin, address: 北京, salary:88888} info {"name": "Damin", "address": "北京…

基于原始套接字的嗅探器

嗅探器这个代码我去年的时候就已经写过了,这个学期并不是非常忙,顺手复习网络,就又尝试着写了一遍。 其实在写嗅探器的时候,最主要的还是要将网卡设置为混杂模式。在此基础之上,对抓到的数据包进行分析。 这个是我写出…

3D打印探讨:三个应用方向与四项风险

来源:学习时报摘要:3D打印技术已经诞生超过30年,今天已经被应用到众多领域。它在解决国际人道主义危机、提高医学水平、保护生态环境方面具有重要的应用价值,同时也在危机就业、新型犯罪与安全威胁等方面存在风险。3D打印技术从诞…

discuz x2.5用户注册后邮箱认证后无法收到邮件或者直接进垃圾箱

又是一个周末,jquery特效继续折腾我那discuz论坛,我开启了个邮箱验证,恶意注册的太恶心了,没有办法。 能稍微屏蔽点,但是问题来了,据亲们反应,无法收到验证邮件,或者有时间直接进入垃…

新能源汽车产业链:锂电设备站上风口

来源:乐晴智库精选摘要:政策宠儿,高额补贴下新能源汽车行业快速成长。全球新能源汽车在过去几年高速成长,从2011年到2017年,全球新能源汽车销量从5.1万辆增长到162.1万辆,期间的复合增速达到77.9%。中国对全…

CNN分类,ResNet V1 ,ResNet V2,ResNeXt,DenseNet

一.CNN分类 1.基于空间利用的CNN 2.基于深度的CNN 3.基于多路径的CNN 4.基于宽度的多连接 5.基于特征图的CNN 6.基于通道的CNN 7.基于注意力的CNN 二,ResNet V1 2015 ILSVRC 第一 论文指出归一化包括BN,权重初始化已经很大程度解决了梯度消失和爆炸的问题&…

基于AI的视频分析正在推动智能社会的到来

来源:资本实验室摘要:随着我们日渐掌握越来越强大的计算能力、更先进的计算算法、更易用的软件系统,以及不断下降的数据存储成本,我们正在具备对无处不在的大量视频进行实时分析的能力。尤其值得关注的是,当人工智能技…

Reporting Services 的伸缩性和性能表现规划(转载)

简介 Microsoft? SQL Server? Reporting Services 是一个将集中管理的报告服务器具有的伸缩性和易管理性与基于 Web 和桌面的报告交付手段集于一身的报告平台。Reporting Services 是微软功能全面的商业智能平台的重要组件。 对于许多组织,通过报告提供信息是日常…

卷积在计算机中实现+pool作用+数据预处理目的+特征归一化+理解BN+感受野理解与计算+梯度回传+NMS/soft NMS

一.卷积在计算机中实现 1.卷积 将其存入内存当中再操作(按照“行先序”): 这样就造成混乱. 故需要im2col操作,将特征图转换成庞大的矩阵来进行卷积计算,利用矩阵加速来实现,牺牲了…

业界 | 清华发布《人工智能芯片技术白皮书(2018)》

来源:大数据文摘12月11日,在第三届未来芯片论坛上,清华大学联合北京未来芯片技术高精尖创新中心发布《人工智能芯片技术白皮书(2018)》。整个《白皮书》总共分为10个章节,第一章节首先对芯片发展的背景做了…

玩转html5canvas画图

导航 前言基本知识绘制矩形清除矩形区域圆弧路径 绘制线段绘制贝塞尔曲线 线性渐变径向渐变(发散)图形变形(平移、旋转、缩放)矩阵变换(图形变形的机制)图形组合给图形绘制阴影绘制图像(图片平铺…

Gartner预测:2019年七大AI科技趋势,百万行业将颠覆!

来源:网络大数据摘要:尽管科幻小说可能将人工智能机器人描绘成坏人,但一些科技巨头现在也将其用于安全。 微软和优步等公司使用Knightscope K5机器人巡逻停车场和大型户外区域来预测和预防犯罪。 机器人可以读取车牌,报告可疑活动…

Xception,Inception-ResNet,SENet(Squeeze-and-Excitation)

一.Xception Xception是在InceptionV3基础上修改的,主要引入了深度可分离卷积,将空间和通道的操作进行解耦合。 与“extreme” Inception两个区别: 1,11卷积的顺序,Xcption用于33之后,而Inception用于之前 2,Xcepti…

物联网白皮书【2018】重磅发布|今年的物联网产业交出了一张怎样的答卷

来源:中国信息通信研究院摘要:物联网白皮书(2018)由中国信息通信研究院、中国信息通信研究院西部分院、物联网智库、上海市物联网行业协会、杭州市物联网行业协会、中信建投证券股份有限公司、国家智能传感器创新中心联合撰写发布…