Opencv实用笔记(一): 获取并绘制JSON标注文件目标区域(可单独保存目标小图)
文章目录
- 背景
- 代码
背景
如果我们想要根据json标注文件,获取里面的指定目标的裁剪区域,那么我们可以根据以下代码来实现(也可以校验标注情况)。
代码
from tqdm import tqdm
import os, json, cv2, copy
import numpy as npdef get_all_images(path, flags):result_list, filenames = [], []for root, dirs, files in os.walk(path):for file in files:filename, file_extension = os.path.splitext(file)if file_extension.lower() in flags:result_list.append(os.path.join(root, file))filenames.append(file)return result_list, filenamesdef get_labelme_info(label_file, target):anno = json.load(open(label_file, "r", encoding="utf-8"))shapes = anno['shapes']image_path = os.path.basename(anno['imagePath'])labels = []boxes = []for s in shapes:pts = s['points']x1, y1 = pts[0]x2, y2 = pts[1]label = s['label']if label in target:labels.append(label)boxes.append([x1, y1, x2, y2])return image_path, boxes, labelsdef plot_one_ori(image, boxs, label, color, mask_alpha=0.4):[x1, y1, x2, y2] = boxsmask_img = copy.deepcopy(image) # 1ori_img = copy.deepcopy(mask_img) # 1cropped_image = ori_img[y1:y2, x1:x2]img_height, img_width = image.shape[:2]size = min([img_height, img_width]) * 0.0006text_thickness = int(min([img_height, img_width]) * 0.001)cv2.rectangle(image, (x1, y1), (x2, y2), color, 3)caption = f'{"原标签-"}{label}'(tw, th), _ = cv2.getTextSize(text=caption, fontFace=cv2.FONT_HERSHEY_SIMPLEX,fontScale=size, thickness=text_thickness)th = int(th * 1.2)cv2.rectangle(image, (x1, y2),(x1 + tw, y2 + th), color, -1)cv2.rectangle(mask_img, (x1, y2),(x1 + tw, y2 + th), color, -1)cv2.putText(image, caption, (x1, y2 + th), cv2.FONT_HERSHEY_SIMPLEX, size, (255, 255, 255), text_thickness, cv2.LINE_AA)cv2.putText(mask_img, caption, (x1, y2 + th), cv2.FONT_HERSHEY_SIMPLEX, size, (255, 255, 255), text_thickness, cv2.LINE_AA)image = cv2.addWeighted(mask_img, mask_alpha, image, 1 - mask_alpha, 0)return image, cropped_imagedef cv_imread(filePath):cv_img = cv2.imdecode(np.fromfile(filePath, dtype=np.uint8), flags=cv2.IMREAD_COLOR)return cv_imgif __name__ == "__main__":img_folder = r"\\DSJ_NAS_90*******" # 原图和JSON文件位置save_target_path = r"\\DSJ_NA************" # 保存位置target = ["red_face"] # 获取指定目标,可传多个os.makedirs(save_target_path, exist_ok=True)img_list, filenames = get_all_images(img_folder, flags=[".jpg", ".png", ".jpeg"])print(filenames)for filename in filenames:fn, file_extension = os.path.splitext(filename)image_path = os.path.join(img_folder, filename) # 图片名json_path = os.path.join(img_folder, "{}.json".format(fn)) # 标签文件名save_path = os.path.join(save_target_path, "{}.jpg".format(fn))_, ori_boxes, ori_labels = get_labelme_info(json_path, target)for box, label in zip(ori_boxes, ori_labels):x1, y1, x2, y2 = list(map(int, box))image = cv_imread(image_path)image, crop_image = plot_one_ori(image, [x1, y1, x2, y2], label, color=(0,0,255))# cv2.imshow("1",crop_image)# cv2.waitKey(1)cv2.imencode('.jpg', crop_image)[1].tofile(save_path)
相关文章:
Opencv实用笔记(一): 获取并绘制JSON标注文件目标区域(可单独保存目标小图)
文章目录 背景代码 背景 如果我们想要根据json标注文件,获取里面的指定目标的裁剪区域,那么我们可以根据以下代码来实现(也可以校验标注情况)。 代码 from tqdm import tqdm import os, json, cv2, copy import numpy as npdef…...
LabVIEW在高校电力电子实验中的应用
概述:本文介绍了如何利用LabVIEW优化高校电力电子实验,通过图形化编程实现参数调节、实时数据监控与存储,并与Simulink联动,提高实验效率和数据处理能力。 需求背景高校实验室在进行电机拖动和电力电子实验时,通常使用…...
rtsp python实现
1. rtsp rtp rtcp https://hope-wisdom.blog.csdn.net/article/details/138259027 2.rtsp加速 https://mp.weixin.qq.com/s/0C1b-8pFw0HaE1xpNbrxxw 3. 实现了一部分获取数据 import socket import base64 import threading import struct# 定义 RTSP 请求 def send_rtsp_…...
RHCE (Linux进阶) Ubuntu 操作系统安装教程
一、在官网下载iso镜像文件 下载地址: https://cn.ubuntu.com/download/server/step1#downloads(下载最新的Ubuntu 20.04 LTS服务器版本) 二、VMware安装配置过程 基本安装过程 1、新建虚拟机 2、选择典型即可 3、设置下载好的Ubuntu对应路…...
vue-router 源码分析——1. 路由匹配
这是对vue-router 3 版本的源码分析。 本次分析会按以下方法进行: 按官网的使用文档顺序,围绕着某一功能点进行分析。这样不仅能学习优秀的项目源码,更能加深对项目的某个功能是如何实现的理解。这个对自己的技能提升,甚至面试时…...
百度云下载不限速方式集合
使用解析网站配合Motrix工具软件 下载Motrix工具:Motrix下载链接打开解析网址:解析网站获取,将百度网盘链接粘贴到解析网站,获取下载链接。在Motrix中配置Aria2 RPC地址:ws://localhost:16800/jsonrpc开始下载&#x…...
2024年6月1日 (周六) 叶子游戏新闻
Embracer探讨单机游戏大作涨价超过70美元的可能性在Embracer集团等待公布新公司名称的同时,他们对游戏大作的价格上涨做出了评论。几年来,游戏大作的价格已经达到了70美元的门槛。Embracer集团的CEO Lars Wingefors在采访中表示,电子游戏行业…...
MathorCup挑战赛获奖名单公示,第九届研讨会及颁奖典礼即将举行
近日,备受瞩目的2024年第十四届MathorCup高校数学建模挑战赛圆满落幕,竞赛组委会于近日公示了获奖名单初稿。本届竞赛自2024年4月12日至16日举行,吸引了来自全国740所高校的9119支队伍踊跃参与,其中包括本科生、研究生、专科生及教…...
vulnhub靶机xptosystem
下载地址:https://download.vulnhub.com/xpto/xptosystem.ova 主机发现 端口扫描 服务扫描 漏洞扫描 看一下web 目录爆破 那不用说肯定看看robots.txt 要检查readme去看看 看不懂 这个是靶场吧很像 在最后看着挺像url路径的 还真是,我直接base64 坏了还…...
Spring Boot详解:深入了解与实践
文章目录 1. Spring Boot简介1.1 什么是Spring Boot?1.2 Spring Boot的历史背景1.3 Spring Boot的核心特点 2. Spring Boot的核心概念2.1 自动配置2.1.1 自动配置原理2.1.2 自定义配置 2.2 Spring Boot Starter2.3 Spring Boot CLI 3. Spring Boot的主要功能模块3.1…...
FreeRtos进阶——中断的内部逻辑
中断与非中断API的区别 BaseType_t xQueueSendToBack(QueueHandle_t xQueue,const void *pvItemToQueue,TickType_t xTicksToWait); BaseType_t xQueueSendToBackFromISR(QueueHandle_t xQueue,const void *pvItemToQueue,BaseType_t *pxHigherPriorityTaskWok…...
Centos7对比Ubuntu一些常用操作差异点
Centos7对比Ubuntu一些常用操作差异点 CentOS 7将于2024年6月30日停止维护,CentOS8已经转为Rhel的上游项目。同时Centos7的软件仓库中,部分软件版本较老。后续使用过程中可以考虑切换到Ubuntu。 下面总结了一些两个系统的常见差异点,包括软…...
24、matlab二维和三维网格(meshgrid函数)以及散点数据插值 griddata()函数
1、二维和三维网格(meshgrid函数) 语法 语法1:[X,Y] = meshgrid(x,y) 基于向量 x 和 y 中包含的坐标返回二维网格坐标。 语法2:[X,Y] = meshgrid(x) 与 [X,Y] = meshgrid(x,x) 相同,并返回网格大小为 length(x)length(x) 的方形网格坐标。 语法3:[X,Y,Z] = meshgrid(x,y,…...
Codeforces Round 950 (Div. 3)
好久没写题解了,今天来写个题解。 A - 问题 Generator #include "bits/stdc.h" using namespace std;#define int long long #define endl \n #define IOS ios::sync_with_stdio(0),cin.tie(0); #define all(x) x.begin(),x.end() #define pi pair<in…...
弘君资本炒股开户:如何看待股价波动?
在股票商场上股价的动摇无疑是投资者最为关心的话题之一,面临股价的起伏不定投资者往往会感到迷茫和焦虑。关于怎么看待股价动摇,弘君资本下面就为大家详细介绍一下。 股价动摇是股市运行的常态,股市是国民经济的晴雨表,股票价格…...
操作系统实验六 文件系统验证实验
前言 当时由于假期的原因,我们不需要做实验五,所以实验六是我们做的最后一个实验,因此实验五就需要靠大家自己完成了。 1.实验目的 初步掌握Linux系统文件权限和IO操作。 2.实验内容 熟悉Linux系统文件权限和使用相关IO函数进行文件创建和…...
python中的循环控制语句break与continue
学习这两个语句之前,我们要先了解这两个语句是什么意思: break:中断、打破的意思。所以它的跳出循环的意思 continue:继续的意思,意思是跳过当前条件,继续循环 新需求来了!我们不仅要告诉 Py…...
C语言笔记23 •文件操作•
1.为什么要使用文件? 文件,顾名思义就是存储我们所写在电脑上的文本内容。如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失 了,等再次运⾏程序&#x…...
新项目来了,JDK 17和JDK 21 该如何选择?
博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …...
友顺科技(UTC)分立器件与集成IC产品选型和应用
友顺科技股份有限公司成立于1990年,是全球领先的集成电路与功率半导体厂商 ,集团总部位于台北,生产基地位于福州、厦门。 友顺科技具有完整模拟组件产品线,其中类比IC涵盖各种稳压器、PWM控制IC, 放大器、比较器、逻辑IC、Voltage Translato…...
【ASTM D4169】之穿梭机器人,仓储机器人,托盘四向穿梭机器人的包装运输安全验证守法
穿梭机器人(通常指托盘四向穿梭车、智能物流机器人)的包装验证,核心目标是确保其在经历长途运输、仓储周转、装卸搬运后,机械结构、电子元器件和功能性能保持完好。 穿梭机器人的包装验证体系相对复杂,因为它既是运输…...
LLM到Harness Engineering,我花一天时间捋清了这条技术链,终于搞懂了!
本文深入浅出地梳理了AI领域中的核心概念,从基础的大语言模型(LLM)、Token、Context、Prompt,到工具(Tool)、模型上下文协议(MCP),再到智能体(Agentÿ…...
ViGEmBus技术指南:构建跨平台游戏控制器兼容解决方案
ViGEmBus技术指南:构建跨平台游戏控制器兼容解决方案 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 如何解决游戏控制器的跨平台兼容性难题&…...
终极TypeScript类型安全指南:LiveTerm接口定义与类型检查最佳实践
终极TypeScript类型安全指南:LiveTerm接口定义与类型检查最佳实践 【免费下载链接】LiveTerm 💻 Build terminal styled websites in minutes! 项目地址: https://gitcode.com/gh_mirrors/li/LiveTerm LiveTerm是一个基于Next.js的终端风格网站构…...
GOERTEK SPL06-001 LGA-8 压力传感器
关键特性 压力范围:300...1100hPa(99000米...-500米,相对于海平面) 温度范围:-40...85C 供电电压:1.7.. 3.6V (VDD) ,1.2... 3.6V (VDDIO)封装:带金属盖的LGA封装 小尺寸:2.5mmx2.0mm;超薄:0.95mm高度 相对精度:0.06hPa,相当于0.5米 绝对精度:典型值1hPa…...
PipedInputStream和PipedOutputStream的源码分析和使用方法详细分析
一、PipedOutputStream(生产者)源码——向PipedInputStream(消费者)中的缓冲区(byte[]数组)写入字节数据的输出Stream(生产者)package java.io;import java.io.*;public class Piped…...
毕业设计作品精选【芳芯科技】酒驾检测座椅设计
实物效果图:实现功能:有人的情况下,单片机实时采集周围的酒精浓度,如果超出,蜂鸣器报警,LED闪烁。检测座位重量和检测人体发射的红外,两者都满足认为座位有人,否则无人。配有显示屏进…...
零基础入门UNet人脸融合:手把手教你搭建本地换脸工具
零基础入门UNet人脸融合:手把手教你搭建本地换脸工具 1. 项目介绍与环境准备 1.1 什么是UNet人脸融合 UNet人脸融合是一种基于深度学习的人脸合成技术,它能够将一张图片中的人脸特征自然地融合到另一张图片上。这项技术在影视特效、数字艺术创作、社交…...
SecGPT-14B模型压力测试:验证OpenClaw高并发安全任务的稳定性
SecGPT-14B模型压力测试:验证OpenClaw高并发安全任务的稳定性 1. 测试背景与目标 最近在探索如何将OpenClaw与安全大模型结合,构建一个自动化安全分析助手。SecGPT-14B作为一款专注于网络安全的大模型,理论上可以处理端口扫描、日志分析等任…...
实战利器:基于快马平台为你的车辆检测项目定制专属labelimg标注工具
在AI项目开发中,数据标注往往是决定模型效果的关键环节。最近我在做一个车辆检测项目时,发现通用的标注工具无法满足特定需求,于是尝试用InsCode(快马)平台快速定制了一个专属的labelimg工具。整个过程比想象中顺利,分享几个实战要…...
