OpenCV——把YOLO格式的圖片目標截圖,并按目標類別保存

import os
import cv2def get_class_folder(catagetory,class_id, base_folder):# 根據類別ID創建文件夾路徑class_folder = os.path.join(base_folder, catagetory[int(class_id)])if not os.path.exists(class_folder):os.makedirs(class_folder)return class_folderdef crop_and_save(image_path, label, class_folder):# 讀取圖片img = cv2.imread(image_path)height, width = img.shape[:2]# 解析標簽parts = label.strip().split()x_center = float(parts[1]) * widthy_center = float(parts[2]) * heightimg_width = float(parts[3]) * widthimg_height = float(parts[4]) * height# 計算左上角坐標x1 = int(x_center - (img_width / 2))y1 = int(y_center - (img_height / 2))# 確保裁剪區域在圖片范圍內x1 = max(0, x1)y1 = max(0, y1)x2 = min(width, x1 + img_width)y2 = min(height, y1 + img_height)# 裁剪圖片cropped_img = img[int(y1):int(y2), int(x1):int(x2)]# 保存裁剪后的圖片,文件名為數字遞增file_number = 1file_path = os.path.join(class_folder, f"{file_number}.jpg")while os.path.exists(file_path):file_number += 1file_path = os.path.join(class_folder, f"{file_number}.jpg")cv2.imwrite(file_path, cropped_img)def main():root = r"D:\desk\Add_Building_20240616\IR"images_folder = os.path.join(root, 'images')labels_folder = os.path.join(root,'labels')cropped_images_base_folder = os.path.join(root,'cropped_images')class_path = os.path.join(labels_folder, r"classes.txt")category ={}with open(class_path, 'r', encoding='utf-8') as f:cls = f.readlines()for i, c in enumerate(cls):category[i] = c.strip()# 確保裁剪圖片的基文件夾存在if not os.path.exists(cropped_images_base_folder):os.makedirs(cropped_images_base_folder)# 遍歷images文件夾中的所有圖片for image_filename in os.listdir(images_folder):if image_filename.lower().endswith(('.png', '.jpg', '.jpeg')):# 構建圖片和標簽的完整路徑image_path = os.path.join(images_folder, image_filename)label_path = os.path.join(labels_folder, os.path.splitext(image_filename)[0] + '.txt')# 確保標簽文件存在if os.path.exists(label_path):# 讀取標簽文件with open(label_path, 'r') as file:labels = file.readlines()# 遍歷每個標簽for label in labels:# 獲取類別IDclass_id = int(label.strip().split()[0])# 獲取類別文件夾class_folder = get_class_folder(category,class_id, cropped_images_base_folder)# 裁剪并保存圖片crop_and_save(image_path, label, class_folder)if __name__ == '__main__':main()

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

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

相關文章

VPN是什么?

VPN,全稱Virtual Private Network,即“虛擬私人網絡”,是一種在公共網絡(如互聯網)上建立加密、安全的連接通道的技術。簡單來說,VPN就像是一條在公共道路上鋪設的“秘密隧道”,通過這條隧道傳輸…

圖像的反轉

圖像顏色的反轉一般分為兩種:一種是灰度圖片的顏色反轉,另一種是彩色圖像的顏色反轉。 本節使用的原圖如下: 1.1 灰度圖像顏色反轉 灰度圖像每個像素點只有一個像素值來表示,色彩范圍在0-255之間,反轉方法255-當前像…

信創產業政策,信創測試方面

信創產業的政策支持主要體現在多個方面,這些政策旨在推動產業的快速發展,加強自主創新能力,保障國家信息安全,以及促進產業結構的優化升級。 首先,政府通過財政支持、稅收優惠等方式,加大對信創產業的資金…

8.ApplicationContext常見實現

ClassPathXmlApplicationContext 基于classpath下xml格式的配置文件來創建 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-i…

Flutter——最詳細(Drawer)使用教程

背景 應用左側或右側導航面板&#xff1b; 屬性作用elevation相當于陰影的大小 import package:flutter/material.dart;class CustomDrawer extends StatelessWidget {const CustomDrawer({Key? key}) : super(key: key);overrideWidget build(BuildContext context) {return…

解決SeaTunnel 2.3.4版本寫入S3文件報錯問題

在使用Apache SeaTunnel時&#xff0c;我遇到了一個寫入S3文件的報錯問題。通過深入調試和分析&#xff0c;找到了問題所在&#xff0c;并提出了相應的解決方案。 本文將詳細介紹報錯情況、參考資料、解決思路以及后續研究方向&#xff0c;希望對大家有幫助&#xff01; 一、…

代碼隨想錄算法訓練營第二天|【數組】977.有序數組的平方

題目 給你一個按 非遞減順序 排序的整數數組 nums&#xff0c;返回 每個數字的平方 組成的新數組&#xff0c;要求也按 非遞減順序 排序。 示例 1&#xff1a; 輸入&#xff1a;nums [-4,-1,0,3,10] 輸出&#xff1a;[0,1,9,16,100] 解釋&#xff1a;平方后&#xff0c;數組…

修改頭文件版本需要修改的文件

以修改ui的頭文件版本為例&#xff0c;還需要同時更新 PJ10PC20240120041_c928\components\master-t5\hikauto\module\app\include PJ10PC20240120041_c928\components\master-t5\hikauto\module\app\include\dsp PJ10PC20240120041_c928\components\master-t5\hikauto\incl…

C# Halcon目標檢測算法

在Halcon中進行目標檢測可以使用傳統的計算機視覺方法&#xff0c;也可以使用深度學習的方法。Halcon提供了豐富的函數庫來處理這些任務&#xff0c;而在C#中使用Halcon&#xff0c;你需要通過Halcon .NET接口。 以下是使用Halcon進行目標檢測的一般步驟&#xff0c;這里我將給…

DDL:針對于數據庫、數據表、數據字段的操作

數據庫的操作 # 查詢所有數據 SHOW DATABASE; #創建數據庫 CREATE DATABASE 2404javaee; #刪除數據庫 DROP DATABASE 2404javaee; 數據表的操作 #創建表 CREATE TABLE s_student( name VARCHAR(64), s_sex VARCHAR(32), age INT(3), salary FLOAT(8,2), c_course VARC…

Windows 的 MFC開發的使用示例——講得挺好的

【Visual Studio 2019】創建 MFC 桌面程序 ( 安裝 MFC 開發組件 | 創建 MFC 應用 | MFC 應用窗口編輯 | 為按鈕添加點擊事件 | 修改按鈕文字 | 打開應用 )-騰訊云開發者社區-騰訊云 (tencent.com)

【算法】(C語言):堆排序

堆&#xff08;二叉樹的應用&#xff09;&#xff1a; 完全二叉樹。最大堆&#xff1a;每個節點比子樹所有節點的數值都大&#xff0c;根節點是最大值。父子索引號關系&#xff08;根節點為0&#xff09;&#xff1a;&#xff08;向上&#xff09;子節點x&#xff0c;父節點(x…

datawhale大模型應用開發夏令營學習筆記一

參考自 基于LangChainLLM的本地知識庫問答&#xff1a;從企業單文檔問答到批量文檔問答datawhale的llm-universe 作者現在在datawhale夏令營的大模型應用開發這個班中&#xff0c;作為一個小白&#xff0c;為了能為團隊做出一點貢獻&#xff0c;現在就要開始學習怎么使用langch…

實戰教程:如何用JavaScript構建一個功能強大的音樂播放器,兼容本地與在線資源

項目地址&#xff1a;Music Player App 作者&#xff1a;Reza Mehdikhanlou 視頻地址&#xff1a;youtube 我將向您展示如何使用 javascript 編寫音樂播放器。我們創建一個項目&#xff0c;您可以使用 javascript 從本地文件夾或任何 url 播放音頻文件。 項目目錄 assets 1…

頂級10大AI測試工具

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

暑期編程預習指南

暑期編程預習指南 高考結束后&#xff0c;迎來的是一段難得的假期時光。對于那些有志于踏入IT領域的高考生來說&#xff0c;這段時間無疑是一個重要的起點。為了幫助你們更好地利用這個假期&#xff0c;為未來的學習和職業生涯打下堅實的基礎&#xff0c;特此提供一份編程預習…

JWT入門

JWT與TOKEN JWT&#xff08;JSON Web Token&#xff09;是一種基于 JSON 格式的輕量級安全令牌&#xff0c;通常用于在網絡應用間安全地傳遞信息。而“token”一詞則是一個更廣泛的術語&#xff0c;用來指代任何形式的令牌&#xff0c;用于在計算機系統中進行身份驗證或授權。J…

【?講解下Laravel為什么會成為最優雅的PHP框架?】

&#x1f3a5;博主&#xff1a;程序員不想YY啊 &#x1f4ab;CSDN優質創作者&#xff0c;CSDN實力新星&#xff0c;CSDN博客專家 &#x1f917;點贊&#x1f388;收藏?再看&#x1f4ab;養成習慣 ?希望本文對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出…

cloudreve 設置開機服務

創建一個Systemd服務文件&#xff1a; 打開終端并創建一個新的服務文件&#xff1a; sudo nano /etc/systemd/system/cloudreve.service 在服務文件中添加以下內容&#xff1a; 根據你的設置調整路徑和參數&#xff0c;然后將以下配置粘貼到文件中&#xff1a; [Unit] Descri…

Django學習第四天

啟動項目命令 python manage.py runserver 分頁功能封裝到類中去 封裝的類的代碼 """ 自定義的分頁組件,以后如果想要使用這個分頁組件&#xff0c;你需要做&#xff1a; def pretty_list(request):# 靚號列表data_dict {}search_data request.GET.get(q, &…