計算A圖片所有顏色占B圖片紅色區域的百分比

import cv2
import numpy as npdef calculate_overlap_percentage(a_image_path, b_image_path):# 讀取A組和B組圖像a_image = cv2.imread(a_image_path)b_image = cv2.imread(b_image_path)# 將圖像從BGR轉為HSV色彩空間,便于顏色篩選a_hsv = cv2.cvtColor(a_image, cv2.COLOR_BGR2HSV)b_hsv = cv2.cvtColor(b_image, cv2.COLOR_BGR2HSV)# 設置B組紅色的HSV范圍lower_red = np.array([0, 100, 100])upper_red = np.array([10, 255, 255])# 提取B組紅色區域的掩膜b_red_mask = cv2.inRange(b_hsv, lower_red, upper_red)# 設置A組顏色區域的HSV范圍(棕色和綠色)# 棕色的HSV范圍lower_brown = np.array([10, 30, 30])upper_brown = np.array([25, 255, 200])# 綠色的HSV范圍lower_green = np.array([35, 50, 50])upper_green = np.array([85, 255, 255])# 提取A組棕色和綠色區域的掩膜a_brown_mask = cv2.inRange(a_hsv, lower_brown, upper_brown)a_green_mask = cv2.inRange(a_hsv, lower_green, upper_green)# 合并A組的棕色和綠色區域掩膜a_color_mask = cv2.bitwise_or(a_brown_mask, a_green_mask)# 計算B組紅色區域的像素數量b_red_area = cv2.countNonZero(b_red_mask)# 在A組中找到與B組紅色區域重合的區域a_overlap = cv2.bitwise_and(a_color_mask, b_red_mask)# 計算A組與B組紅色區域重合的像素數量a_overlap_area = cv2.countNonZero(a_overlap)# 計算A組有顏色區域占B組紅色區域的百分比overlap_percentage = (a_overlap_area / b_red_area) * 100 if b_red_area != 0 else 0return overlap_percentage# 示例調用
a_image_path = "path_to_a_image.jpg"
b_image_path = "path_to_b_image.jpg"
percentage = calculate_overlap_percentage(a_image_path, b_image_path)
print(f"A組顏色區域占B組紅色區域的百分比為: {percentage:.2f}%")

下面查看提取的mask是否正確

    # 調整顯示圖像的大小(設置為目標寬度 600 像素)height, width = b_red_mask.shapetarget_width = 600target_height = int(target_width * height / width)# 使用 cv2.resize 調整圖像大小b_red_mask_resized = cv2.resize(b_red_mask, (target_width, target_height))# 顯示調整后的B組紅色掩膜cv2.imshow("B Red Mask", b_red_mask_resized)cv2.waitKey(0)  # 等待按鍵按下cv2.destroyAllWindows()  # 關閉所有窗口

?下面直接輸出圖片是戶更方便

cv2.imwrite("a_color_mask.png", a_color_mask)

?

把a組與b組文件夾下的所有對應的圖片進行計算,然后輸出到一個txt文件?

import cv2
import numpy as np
import osdef calculate_overlap_percentage(a_image_path, b_image_path):# 讀取A組和B組圖像a_image = cv2.imread(a_image_path)b_image = cv2.imread(b_image_path)# 將圖像從BGR轉為HSV色彩空間,便于顏色篩選a_hsv = cv2.cvtColor(a_image, cv2.COLOR_BGR2HSV)b_hsv = cv2.cvtColor(b_image, cv2.COLOR_BGR2HSV)# 設置B組紅色的HSV范圍lower_red = np.array([0, 100, 100])upper_red = np.array([10, 255, 255])# 提取B組紅色區域的掩膜b_red_mask = cv2.inRange(b_hsv, lower_red, upper_red)# 設置A組顏色區域的HSV范圍(棕色和綠色)# 棕色的HSV范圍lower_brown = np.array([10, 30, 30])upper_brown = np.array([25, 255, 200])# 綠色的HSV范圍lower_green = np.array([35, 50, 50])upper_green = np.array([85, 255, 255])# 提取A組棕色和綠色區域的掩膜a_brown_mask = cv2.inRange(a_hsv, lower_brown, upper_brown)a_green_mask = cv2.inRange(a_hsv, lower_green, upper_green)# 合并A組的棕色和綠色區域掩膜a_color_mask = cv2.bitwise_or(a_brown_mask, a_green_mask)# 計算B組紅色區域的像素數量b_red_area = cv2.countNonZero(b_red_mask)# 在A組中找到與B組紅色區域重合的區域a_overlap = cv2.bitwise_and(a_color_mask, b_red_mask)# 計算A組與B組紅色區域重合的像素數量a_overlap_area = cv2.countNonZero(a_overlap)# 計算A組有顏色區域占B組紅色區域的百分比overlap_percentage = (a_overlap_area / b_red_area) * 100 if b_red_area != 0 else 0return overlap_percentagedef process_images(a_folder, b_folder, output_file):# 獲取文件夾中的所有文件a_files = sorted(os.listdir(a_folder))b_files = sorted(os.listdir(b_folder))# 打開輸出文件with open(output_file, 'w') as f:# 遍歷文件夾中的每一對圖片for a_file, b_file in zip(a_files, b_files):# 拼接完整的文件路徑a_image_path = os.path.join(a_folder, a_file)b_image_path = os.path.join(b_folder, b_file)# 確保文件是圖片文件if not a_file.endswith(('.jpg', '.png', '.jpeg')) or not b_file.endswith(('.jpg', '.png', '.jpeg')):continue# 計算重疊百分比percentage = calculate_overlap_percentage(a_image_path, b_image_path)# 寫入結果到txt文件f.write(f'{a_file} vs {b_file}: {percentage:.2f}%\n')print(f'{a_file} vs {b_file}: {percentage:.2f}%')# 文件夾路徑
a_folder = 'path_to_a_folder'  # A組文件夾路徑
b_folder = 'path_to_b_folder'  # B組文件夾路徑
output_file = 'overlap_results.txt'  # 輸出的txt文件路徑# 處理文件夾中的所有圖片并輸出到txt文件
process_images(a_folder, b_folder, output_file)

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

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

相關文章

每日算法 -【Swift 算法】盛最多水的容器

盛最多水的容器:Swift 解法與思路分析 📌 問題描述 給定一個長度為 n 的整數數組 height,每個元素表示在橫坐標 i 處的一條垂直線段的高度。任意兩條線段和 x 軸構成一個容器,該容器可以裝水,水量的大小由較短的那條…

云原生安全基礎:Linux 文件權限管理詳解

🔥「炎碼工坊」技術彈藥已裝填! 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 在云原生環境中,Linux 文件權限管理是保障系統安全的核心技能之一。無論是容器化應用、微服務架構還是基礎設施即代碼(IaC&#xf…

TypeScript 中的字面量類型(Literal Types)

在 TypeScript 中,字面量類型(Literal Types)是一種特殊的類型,它允許你將變量的類型限制為某個具體的值(如特定的字符串、數字或布爾值),而不僅僅是寬泛的類型(如 string、number&a…

晶臺光耦在手機PD快充上的應用

光耦(光電隔離器)作為關鍵電子元件,在手機PD快充中扮演信號隔離與傳輸的“安全衛士”。其通過光信號實現電氣隔離,保護手機電路免受高電壓損害,同時支持實時信號反饋,優化充電效率。 晶臺品牌推出KL817、KL…

python學習打卡day43

DAY 43 復習日 作業: kaggle找到一個圖像數據集,用cnn網絡進行訓練并且用grad-cam做可視化 浙大疏錦行 數據集使用貓狗數據集,訓練集中包含貓圖像4000張、狗圖像4005張。測試集包含貓圖像1012張,狗圖像1013張。以下是數據集的下…

大數據與數據分析【數據分析全棧攻略:爬蟲+處理+可視化+報告】

- 第 100 篇 - Date: 2025 - 05 - 25 Author: 鄭龍浩/仟墨 大數據與數據分析 文章目錄 大數據與數據分析一 大數據是什么?1 定義2 大數據的來源3 大數據4個方面的典型特征(4V)4 大數據的應用領域5 數據分析工具6 數據是五種生產要素之一 二 …

uniapp 開發企業微信小程序,如何區別生產環境和測試環境?來處理不同的服務請求

在 uniapp 開發企業微信小程序時,區分生產環境和測試環境是常見需求。以下是幾種可靠的方法,幫助你根據環境處理不同的服務請求: 一、通過條件編譯區分(推薦) 使用 uniapp 的 條件編譯 語法,在代碼中標記…

青少年編程與數學 02-020 C#程序設計基礎 15課題、異常處理

青少年編程與數學 02-020 C#程序設計基礎 15課題、異常處理 一、異常1. 異常的分類2. 異常的作用小結 二、異常處理1. 異常處理的定義2. 異常處理的主要組成部分3. 異常處理的作用小結 三、C#異常處理1. 異常的基本概念2. 異常處理的關鍵字3. 異常處理的流程4. 自定義異常5. 異…

云原生時代 Kafka 深度實踐:05性能調優與場景實戰

5.1 性能調優全攻略 Producer調優 批量發送與延遲發送 通過調整batch.size和linger.ms參數提升吞吐量: props.put(ProducerConfig.BATCH_SIZE_CONFIG, 16384); // 默認16KB props.put(ProducerConfig.LINGER_MS_CONFIG, 10); // 等待10ms以積累更多消息ba…

在 Dify 項目中的 Celery:異步任務的實現與集成

Celery 是一個強大而靈活的分布式任務隊列系統,旨在幫助應用程序在后臺異步運行耗時的任務,提高系統的響應速度和性能。在 Dify 項目中,Celery 被廣泛用于處理異步任務和定時任務,并與其他工具(如 Sentry、OpenTelemet…

Pytorch Geometric官方例程pytorch_geometric/examples/link_pred.py環境安裝教程及圖數據集制作

最近需要訓練圖卷積神經網絡(Graph Convolution Neural Network, GCNN),在配置GCNN環境上總結了一些經驗。 我覺得對于初學者而言,圖神經網絡的訓練會有2個難點: ①環境配置 ②數據集制作 一、環境配置 我最初光想…

2025年微信小程序開發:AR/VR與電商的最新案例

引言 微信小程序自2017年推出以來,已成為中國移動互聯網生態的核心組成部分。根據最新數據,截至2025年,微信小程序的日活躍用戶超過4.5億,總數超過430萬,覆蓋電商、社交、線下服務等多個領域(WeChat Mini …

互聯網向左,區塊鏈向右

2008年,中本聰首次提出了比特幣的設想,這打開了去中心化的大門。 比特幣白皮書清晰的描述了去中心化支付的解決方案,并分別從以下幾個方面闡述了他的理念: 一、由轉賬雙方點對點的通訊,而不通過中心化的第三方&#xf…

PV操作的C++代碼示例講解

文章目錄 一、PV操作基本概念(一)信號量(二)P操作(三)V操作 二、PV操作的意義三、C中實現PV操作的方法(一)使用信號量實現PV操作代碼解釋: (二)使…

《對象創建的秘密:Java 內存布局、逃逸分析與 TLAB 優化詳解》

大家好呀!今天我們來聊聊Java世界里那些"看不見摸不著"但又超級重要的東西——對象在內存里是怎么"住"的,以及JVM這個"超級管家"是怎么幫我們優化管理的。放心,我會用最接地氣的方式講解,保證連小學…

簡單實現Ajax基礎應用

Ajax不是一種技術,而是一個編程概念。HTML 和 CSS 可以組合使用來標記和設置信息樣式。JavaScript 可以修改網頁以動態顯示,并允許用戶與新信息進行交互。內置的 XMLHttpRequest 對象用于在網頁上執行 Ajax,允許網站將內容加載到屏幕上而無需…

詳解開漏輸出和推挽輸出

開漏輸出和推挽輸出 以上是 GPIO 配置為輸出時的內部示意圖,我們要關注的其實就是這兩個 MOS 管的開關狀態,可以組合出四種狀態: 兩個 MOS 管都關閉時,輸出處于一個浮空狀態,此時他對其他點的電阻是無窮大的&#xff…

Matlab實現LSTM-SVM回歸預測,作者:機器學習之心

Matlab實現LSTM-SVM回歸預測,作者:機器學習之心 目錄 Matlab實現LSTM-SVM回歸預測,作者:機器學習之心效果一覽基本介紹程序設計參考資料 效果一覽 基本介紹 代碼主要功能 該代碼實現了一個LSTM-SVM回歸預測模型,核心流…

Leetcode - 周賽 452

目錄 一,3566. 等積子集的劃分方案二,3567. 子矩陣的最小絕對差三,3568. 清理教室的最少移動四,3569. 分割數組后不同質數的最大數目 一,3566. 等積子集的劃分方案 題目列表 本題有兩種做法,dfs 選或不選…

【FAQ】HarmonyOS SDK 閉源開放能力 —Account Kit(5)

1.問題描述: 集成華為一鍵登錄的LoginWithHuaweiIDButton, 但是Button默認名字叫 “華為賬號一鍵登錄”,太長無法顯示,能否簡寫成“一鍵登錄”與其他端一致? 解決方案: 問題分兩個場景: 一、…