批量將圖片分別翻轉90、180、270度,并將對應的框標注的json文件也進行相應調整,做到數據增強的效果

#------------------------------------矩形標注增強---------------------------------------
from PIL import Image
import os
import jsondef rotate_images_and_jsons(input_folder):output_folder = os.path.join(input_folder, "rotated_images")os.makedirs(output_folder, exist_ok=True)for filename in os.listdir(input_folder):if filename.endswith(".jpg"):image_path = os.path.join(input_folder, filename)json_path = os.path.join(input_folder, filename.replace(".jpg", ".json"))# Load JSON datawith open(json_path, 'r', encoding='utf-8') as json_file:json_data = json.load(json_file)image = Image.open(image_path)# Rotate the image by 90, 180, and 270 degreesfor angle in [90, 180, 270]:rotated_image = image.rotate(angle, expand=True)# Save rotated images with a default quality valuerotated_image_path = os.path.join(output_folder, f"{os.path.splitext(filename)[0]}_{angle}.jpg")rotated_image.save(rotated_image_path, quality=160)# Update JSON data for rotated imagerotated_json_data = update_json_for_rotation(json_data, image.size, angle, os.path.basename(rotated_image_path))rotated_json_path = os.path.join(output_folder, f"{os.path.splitext(filename)[0]}_{angle}.json")with open(rotated_json_path, 'w', encoding='utf-8') as rotated_json_file:json.dump(rotated_json_data, rotated_json_file, indent=4, ensure_ascii=False)def update_json_for_rotation(json_data, image_size, angle, image_path):width, height = image_sizerotated_json_data = []for shape in json_data['shapes']:points = shape['points']rotated_points = []# 提取坐標信息point1_x, point1_y = points[0]point2_x, point2_y = points[1]if angle == 90:rotated_point1 = [point1_y, width - point1_x]rotated_point2 = [point2_y, width - point2_x]elif angle == 180:rotated_point1 = [width - point1_x, height - point1_y]rotated_point2 = [width - point2_x, height - point2_y]elif angle == 270:rotated_point1 = [height - point1_y, point1_x]rotated_point2 = [height - point2_y, point2_x]else:rotated_point = pointrotated_points.append(rotated_point1)rotated_points.append(rotated_point2)rotated_shape = {'label': shape['label'],'points': rotated_points,'group_id': shape['group_id'],'shape_type': shape['shape_type'],'flags': shape['flags']}rotated_json_data.append(rotated_shape)return {'version': json_data['version'], 'flags': json_data['flags'], 'shapes': rotated_json_data, 'imagePath': image_path, 'imageData': json_data['imageData'], 'imageHeight': json_data['imageHeight'], 'imageWidth': json_data['imageWidth']}# Replace 'input_folder' with your folder containing images and JSON files
rotate_images_and_jsons('./rectangles')

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211503.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211503.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211503.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在JavaScript中,可以使用Object.assign()方法或展開語法(...)來合并對象

在JavaScript中,你可以使用Object.assign()方法或者使用Spread Operator (…) 來合并對象。 Object.assign() Object.assign() 靜態方法將一個或者多個源對象中所有可枚舉的自有屬性復制到目標對象,并返回修改后的目標對象。 語法 Object.assign(tar…

Java TCP(一對一)聊天簡易版

客戶端 import java.io.*; import java.net.Socket; import java.util.Date; import javax.swing.*;public class MyClient {private JFrame jf;private JButton jBsend;private JTextArea jTAcontent;private JTextField jText;private JLabel JLcontent;private Date data;p…

C語言 題目

1.寫一個函數算一個數的二進制(補碼)表示中有幾個1 #include<stdio.h>//統計二進制數中有幾個1 //如13:1101 //需要考慮負數情況 如-1 結果應該是32// n 1101 //n-1 1100 //n 1100 //n-1 1011 //n 1000 //n-1 0111 //n 0000 //看n的變化 int funca(int c){int co…

css:flex布局中子元素高度height沒有達到100%

目錄 問題flex布局示例解決辦法方式一方式二 參考 問題 css中使用flex布局中子元素高度height沒有達到100% flex布局示例 希望實現兩個盒子左右分布&#xff0c;內容垂直居中對齊 <style>.box {display: flex;align-items: center;border: 1px solid #eeeeee;}.box-l…

【ceph】ceph生產常見操作之一---ceph擴容以及注意事項

本站以分享各種運維經驗和運維所需要的技能為主 《python零基礎入門》&#xff1a;python零基礎入門學習 《python運維腳本》&#xff1a; python運維腳本實踐 《shell》&#xff1a;shell學習 《terraform》持續更新中&#xff1a;terraform_Aws學習零基礎入門到最佳實戰 《k8…

react新舊生命周期鉤子

以下的內容根據尚硅谷整理。 舊生命鉤子 輔助理解&#xff1a; 紅色框&#xff1a;掛載時生命鉤子藍色框&#xff1a;更新時生命鉤子綠色框&#xff1a;卸載時生命鉤子 掛載時 如圖所示&#xff0c;我們可以看到&#xff0c;在組件第一次掛載時會經歷&#xff1a; 構造器&a…

stateflow——如何查看狀態機中參數變化及狀態機斷點調試

法一&#xff1a;使用Data Inspector 點擊“符號圖窗”和“屬性”&#xff0c;如圖&#xff1b;在選擇變量n并右鍵點擊inspector&#xff0c;最后在logging&#xff0c;如圖 法二&#xff1a;log active state 和法一類似使用data inspector查看&#xff0c;類似的查看方法和…

【每周一測】Java階段四第三周學習

目錄 1、關于分布式鎖的說法&#xff0c;錯誤的是&#xff08; &#xff09; 2、JDK動態代理產生的代理類和委托類的關系是 3、下列關于ElasticSearch中基本概念描述錯誤的是 4、Spring Cloud 中&#xff0c;Feign 是什么&#xff1f; 5、在JavaScript中&#xff0c;可以使…

玩轉大數據13: 數據倫理與合規性探討

1. 引言 隨著科技的飛速發展&#xff0c;數據已經成為了現代社會的寶貴資產。然而&#xff0c;數據的收集、處理和利用也帶來了一系列的倫理和合規性問題。數據倫理和合規性不僅關乎個人隱私和權益的保護&#xff0c;還涉及到企業的商業利益和社會責任。因此&#xff0c;數據…

韻達快遞單號查詢,以表格的形式導出單號的每一條物流信息

批量查詢韻達快遞單號的物流信息&#xff0c;并以表格的形式導出單號的每一條物流信息。 所需工具&#xff1a; 一個【快遞批量查詢高手】軟件 韻達快遞單號若干 操作步驟&#xff1a; 步驟1&#xff1a;運行【快遞批量查詢高手】軟件&#xff0c;第一次使用的伙伴記得先注冊…

SOP(標準作業程序)和WI(操作指導書)的聯系和區別

目錄 1.SOP&#xff08;標準作業程序&#xff09;&#xff1a;2.WI&#xff08;操作指導書&#xff09;&#xff1a;3.SOP和WI的區別&#xff1a; 1.SOP&#xff08;標準作業程序&#xff09;&#xff1a; SOP: 所謂SOP&#xff0c;是 Standard Operation Procedure三個單詞中…

【計算機網絡實驗】實驗三 IP網絡規劃與路由設計(頭歌)

目錄 一、知識點 二、實驗任務 三、頭歌測試 一、知識點 IP子網掩碼的兩種表示方法 32位IP子網掩碼&#xff0c;特點是從高位開始連續都是1&#xff0c;后面是連續的0&#xff0c;它有以下兩種表示方法&#xff1a; 傳統表示法&#xff0c;如&#xff1a;255.255.255.0IP前…

【WebSocket】使用ws搭建一個簡單的在線聊天室

前言 什么是WebSockets&#xff1f; WebSockets 是一種先進的技術。它可以在用戶的瀏覽器和服務器之間打開交互式通信會話。使用此 API&#xff0c;你可以向服務器發送消息并接收事件驅動的響應&#xff0c;而無需通過輪詢服務器的方式以獲得響應。 webscokets 包括webscoket…

中科院分區和JCR分區有什么區別

文章目錄 名詞解釋學科劃分不同參考的影響因子不同期刊分區不同期刊分區閾值不同 名詞解釋 中科院分區&#xff1a;又稱“中科院JCR分區”&#xff0c;是中國科學院文獻情報中心世界科學前沿分析中心的科學研究成果&#xff0c;期刊分區表數據每年底&#xff08;每年12月中下旬…

汽車繼電器

汽車繼電器 電子元器件百科 文章目錄 汽車繼電器前言一、汽車繼電器是什么二、汽車繼電器的類別三、汽車繼電器的應用實例四、汽車繼電器的作用原理總結前言 汽車繼電器作為一種電子設備,廣泛應用于汽車電路中的各種控制和保護任務,能夠可靠地控制和傳送電能,確保汽車系統的…

Python爬蟲-實現批量抓取王者榮耀皮膚圖片并保存到本地

前言 本文是該專欄的第12篇,后面會持續分享python爬蟲案例干貨,記得關注。 本文以王者榮耀的英雄皮膚為例,用python實現批量抓取“全部英雄”的皮膚圖片,并將圖片“批量保存”到本地。具體實現思路和詳細邏輯,筆者將在正文結合完整代碼進行詳細介紹。注意,這里抓取的圖片…

低代碼:美味膳食或垃圾食品

低代碼開發是近年來迅速崛起的軟件開發方法&#xff0c;讓編寫應用程序變得更快、更簡單。有人說它是美味的膳食&#xff0c;讓開發過程高效而滿足&#xff0c;但也有人質疑它是垃圾食品&#xff0c;缺乏定制性與深度。你認為低代碼到底是美味的膳食還是垃圾食品呢&#xff0c;…

ubuntu串口永久權限

ubuntu串口永久權限 臨時打開串口權限 sudo chmod 666 /dev/ttyUSB0該方法只能臨時添加訪問權限&#xff0c;一次性的&#xff0c;下次拔插串口線或者開關機還需要再次賦予串口權限。 永久打開串口權限 首先查看用戶組 ls -l /dev/ttyUSB0終端輸出&#xff1a; crw-rw-rw…

從零開始搭建鏈上dex自動化價差套利程序(11)

風險控制 需要將倉位杠桿控制到3倍以內&#xff0c;由于dydx與apex沒有獲取倉位杠桿的接口&#xff0c;但是每次發送交易的數額可以決定&#xff0c;故而可以設置每次發送總倉位1.5倍杠桿的數額&#xff0c;然后設置一個變量保證每個方向上的交易不超過2次&#xff0c;即可保證…

數據結構和算法-單鏈表

數據結構和算法-單鏈表 1. 鏈表介紹 鏈表是有序的列表&#xff0c;但是它在內存中是存儲如下 圖1 單鏈表示意圖 小結: 鏈表是以節點的方式存儲每個節點包含data域&#xff0c;next域&#xff0c;指向下一個節點。如圖&#xff1a;發現鏈表的各個節點不一定是連續存儲。比如地…