使用pytorch和opencv根据颜色相似性提取图像
需求:将下图中的花朵提取出来。

代码:
import cv2
import torch
import numpy as np
import timedef get_similar_colors(image, color_list, threshold):# 将图像和颜色列表转换为torch张量device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')image_tensor = torch.from_numpy(image.astype(np.float32)).to(device)color_tensor = torch.tensor(color_list, dtype=torch.float32).to(device)# 计算每个像素与颜色列表中每个颜色的距离distances = torch.cdist(image_tensor.view(-1, 3), color_tensor, p=2).view(image_tensor.shape[0], image_tensor.shape[1], -1)# 找到最小距离及其索引min_distances, _ = torch.min(distances, dim=-1)# 创建掩码,标记接近目标颜色的像素mask = min_distances < threshold# 根据掩码提取接近颜色的部分result = torch.where(mask.unsqueeze(-1), image_tensor, torch.zeros_like(image_tensor))# 将结果转换回numpy数组result_np = result.cpu().numpy().astype(np.uint8)return result_np
# 读取图像s
image = cv2.imread('flower2.jpg')
# 定义颜色列表,每个颜色用BGR格式表示
color_list = [(15, 220, 255),(30, 50, 220)]
# 定义颜色接近度的阈值
threshold = 100
time_start = time.time()
# 提取接近颜色的部分
extracted_image = get_similar_colors(image, color_list, threshold)
time_end = time.time()
time = time_end - time_start
print("time: ", time)# 显示原始图像和提取结果
cv2.imshow('Original Image', image)
cv2.imshow('Extracted Image', extracted_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

进一步,输出掩码部分的黑白图像
import cv2
import torch
import numpy as np
import timedef get_similar_colors(image, color_list, threshold):# 将图像和颜色列表转换为torch张量device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')image_tensor = torch.from_numpy(image.astype(np.float32)).to(device)color_tensor = torch.tensor(color_list, dtype=torch.float32).to(device)# 计算每个像素与颜色列表中每个颜色的距离distances = torch.cdist(image_tensor.view(-1, 3), color_tensor, p=2).view(image_tensor.shape[0], image_tensor.shape[1], -1)# 找到最小距离及其索引min_distances, _ = torch.min(distances, dim=-1)# 创建掩码,标记接近目标颜色的像素mask = min_distances < threshold# 将符合条件的像素设置为黑色result = np.ones_like(image_tensor)result[mask] = [0, 0, 0] # 设置为黑色return result
# 读取图像s
image = cv2.imread('your/image/path')
# 定义颜色列表,每个颜色用BGR格式表示
color_list = [(50, 15, 0), (45, 10, 0), (30, 10, 0)]
# 定义颜色接近度的阈值
threshold = 100
time_start = time.time()
# 提取接近颜色的部分
extracted_image = get_similar_colors(image, color_list, threshold)
time_end = time.time()
time = time_end - time_start
print("time: ", time)# 显示原始图像和提取结果
cv2.imshow('Original Image', image)
cv2.imshow('Extracted Image', extracted_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

相关文章:
使用pytorch和opencv根据颜色相似性提取图像
需求:将下图中的花朵提取出来。 代码: import cv2 import torch import numpy as np import timedef get_similar_colors(image, color_list, threshold):# 将图像和颜色列表转换为torch张量device torch.device(cuda if torch.cuda.is_available() el…...
MySQL 8.X 报错处理
1.重新加载配置 reload the configuration mysql> ALTER INSTANCE RELOAD KEYRING; ERROR 1227 (42000): Access denied; you need (at least one of) the ENCRYPTION_KEY_ADMIN privilege(s) for this operation 提示需要ENCRYPTION_KEY_ADMIN权限 重新授权 GRANT ENCR…...
Ubuntu 22.04安装OpenJDK 17
步骤一:更新软件包 sudo apt update步骤二:安装openjdk-17 sudo apt install openjdk-17-jdk当系统要求输入密码时,请输入密码。然后键入 Y 并按 Enter 继续安装 步骤三:查看安装版本 java -version步骤四:查看安装…...
【时序预测】时间序列有哪些鲁棒的归一化方法
时间序列数据在金融、气象、医疗等领域中广泛存在,而股票数据作为典型的时间序列之一,具有非平稳性、噪声多、波动大等特点。为了更好地进行数据分析和建模,归一化是一个重要的预处理步骤。然而,由于时间序列数据的特殊性…...
nlp第九节——文本生成任务
一、seq2seq任务 特点:输入输出均为不定长的序列 自回归语言模型: 由前面一个字预测下一个字的任务 encoder-decoder结构: Encoder-Decoder结构是一种基于神经网络完成seq2seq任务的常用方案 Encoder将输入转化为向量或矩阵,其…...
STM32MP1xx的启动流程
https://wiki.st.com/stm32mpu/wiki/Boot_chain_overview 根据提供的知识库内容,以下是STM32 MPU启动链的详细解析: 1. 通用启动流程 STM32 MPU启动分为多阶段,逐步初始化外设和内存,并建立信任链: 1.1 ROM代码&…...
wgcloud-server端部署说明
Wgcloud 是一款开源的轻量级服务器监控系统,支持多平台,可对服务器的 CPU、内存、磁盘、网络等指标进行实时监控。 以下是 Wgcloud Server端的详细部署步骤: 环境准备 服务器: 至少准备两台服务器,一台作为监控端&a…...
大模型Agent:人工智能的崭新形态与未来愿景
在人工智能技术高歌猛进的当下,大模型 Agent 作为 AI 领域的关键研究方向,正日益彰显出其独有的魅力以及广阔无垠的应用前景。大模型 Agent 不但具备对环境的感知、自主的理解、决策的制定以及行动的执行能力,而且能够游刃有余地应对繁杂任务…...
专题二最大连续1的个数|||
1.题目 题目分析: 给一个数字k,可以把数组里的0改成1,但是只能改k次,然后该变得到的数组能找到最长的子串且都是1。 2.算法原理 这里不用真的把0变成1,因为改了比较麻烦,下次用就要改回成1,这…...
【ORACLE】ORACLE19C在19.13版本前的一个严重BUG-24761824
背景 最近在某客户的ORACLE开发环境(oracle 19.10)中,发现一个非常奇怪情况, 开发人员反馈,有一条SQL,查询了两个sum函数作为两个字段, select sum(c1),sum(c2) from ...当两个sum一起出现时,第一个sum的结果不对&am…...
2025国家护网HVV高频面试题总结来了03(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 0x1 高频面试题第一套 0x2 高频面试题第二套 0x3 高频面试题第三套 0x4高频面试题第四套 0x1 高频面试题…...
CentOS vs Ubuntu - 常用命令深度对比及最佳实践指南20250302
CentOS vs Ubuntu - 常用命令深度对比及最佳实践指南 引言 在 Linux 服务器操作系统领域,CentOS 和 Ubuntu 是广泛采用的发行版。它们在命令集、默认工具链及生态系统方面各有特点。本文深入剖析 CentOS 与 Ubuntu 在常用命令层面的异同,并结合实践案例…...
SQL命令详解之常用函数
目录 1 简介 2 字符串函数 2.1 字符串函数语法 2.2 字符串函数练习 3 数学函数 3.1 数学函数语法 3.2 数学函数练习 4 日期时间函数 4.1 日期时间函数语法 4.2 日期时间函数练习 5 条件函数 5.1 条件函数语法 5.2 条件函数练习 6 总结 1 简介 在SQL中我们经常会用…...
IndexError: index 0 is out of bounds for axis 1 with size 0
IndexError: index 0 is out of bounds for axis 1 with size 0 欢迎来到英杰社区,这里是博主英杰https://bbs.csdn.net/topics/617804998 报错原因 数组或数据结构为空 如果数组或 DataFrame 在指定的维度上没有任何元素(例如,没有列&#x…...
C++学习之C++初识、C++对C语言增强、对C语言扩展
一.C初识 1.C简介 2.第一个C程序 //#include <iostream> //iostream 相当于 C语言下的 stdio.h i - input 输入 o -output 输出 //using namespace std; //using 使用 namespace 命名空间 std 标准 ,理解为打开一个房间,房间里有我们所需…...
k8s面试题总结(八)
1.K8s部署服务的时候,pod一直处于pending状态,无法部署,说明可能的原因 Node节点的资源不足,yaml文件资源限制中分配的内存,cpu资源太大,node宿主机资源没那么大,导致无法部署。部署pod的yaml文…...
《今日-AI-编程-人工智能日报》
一、AI行业动态 荣耀发布“荣耀阿尔法战略” 荣耀在“2025世界移动通信大会”上宣布,将从智能手机制造商转型为全球领先的AI终端生态公司,并计划未来五年投入100亿美元建设AI设备生态。荣耀展示了基于GUI的个人移动AI智能体,并推出多款AI终端…...
Koupleless 2024 年度报告 2025 规划展望
Koupleless 2024 年度报告 & 2025 规划展望 赵真灵 (花名:有济) Koupleless 负责人 蚂蚁集团技术专家 Koupleless 社区的开发和维护者,曾负责基于 K8s 的应用研发运维平台、Node/Pod 多级弹性伸缩与产品建设,当前主…...
C与C++中inline关键字的深入解析与使用指南
文章目录 引言一、历史背景与设计哲学1.1 C中的inline1.2 C中的inline 二、核心机制对比2.1 编译行为2.2 链接模型2.3 存储类说明符(详细解析)C的灵活组合C的限制原理 补充说明: 三、典型应用场景3.1 C中的使用场景3.2 C中的使用场景 四、现代…...
记录linux安装mysql后链接不上的解决方法
首先确保是否安装成功 systemctl status mysql 如果没有安装的话,执行命令安装 sudo apt install mysql-server 安装完成后,执行第一步检测是否成功。 通常初始是没有密码的,直接登陆 sudo mysql -u root 登录后执行以下命令修改密码&…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
