当前位置: 首页 > news >正文

Imgs,GT,Edge,Gradient_all,Gradient_Foreground

保存一下:
做个记录:

import cv2
import os
import numpy as np# 对整张图片做canny检测  得到纹理图
def canny_all(input_path, output_path):# 遍历文件夹中的所有文件for filename in os.listdir(input_path):# 构造完整的文件路径image_path = os.path.join(input_path, filename)# 确保是图片文件if os.path.isfile(image_path) and filename.lower().endswith(('.png', '.jpg')):# 读取图片image = cv2.imread(image_path)if image is None:print(f"图片 {filename} 读取失败,请检查路径是否正确")else:# 转换为灰度图gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 应用Canny边缘检测grads = cv2.Canny(gray, 100, 200)  # 参数可以根据需要调整# 构造输出文件路径file_root, _ = os.path.splitext(filename)save_path = os.path.join(output_path, file_root + '.png')# 保存结果cv2.imwrite(save_path, grads)print(f"Canny边缘检测结果已保存到 {save_path}")else:print(f"跳过非图片文件 {filename}")print("Canny_all 检测完成!")def canny_Foreground(GT_path, Canny_all_path, output_path):# 遍历第一个文件夹下的所有图片for filename in os.listdir(GT_path):# 构造两个文件夹中文件的完整路径img_path_f1 = os.path.join(GT_path, filename)img_path_f2 = os.path.join(Canny_all_path, filename)# 读取图片A和BimageA = cv2.imread(img_path_f1, cv2.IMREAD_GRAYSCALE)imageB = cv2.imread(img_path_f2, cv2.IMREAD_GRAYSCALE)# 检查图像B是否正确读取if imageB is None:print(f"在文件夹 {Canny_all_path} 中读取图片 {filename} 失败")continue# 检查图像A是否正确读取if imageA is None:print(f"在文件夹 {GT_path} 中读取图片 {filename} 失败,请检查路径是否正确")continue# 检查图像尺寸是否相同if imageA.shape != imageB.shape:print(f"图像尺寸不同,跳过文件:{filename}")continue# 处理图像imageA[np.where(imageB == 0)] = 0# 构造输出文件路径save_path = os.path.join(output_path, filename)# 保存处理后的图像Ccv2.imwrite(save_path, imageA)print(f"前景纹理图已保存:{save_path}")print("canny_Foreground 检测完成!")def getEdge(GT_path, output_path):# 遍历第一个文件夹下的所有图片for filename in os.listdir(GT_path):# 构造完整路径GT_img = os.path.join(GT_path, filename)# 构造输出文件路径  输出为pngfile_root, _ = os.path.splitext(filename)save_path = os.path.join(output_path, file_root + '.png')# 读取图片image = cv2.imread(GT_img, cv2.IMREAD_GRAYSCALE)# 使用腐蚀操作稍微减少物体内部的白色区域,避免边界之外的误检kernel = np.ones((3, 3), np.uint8)  # 创建结构元素,这里使用3x3的矩形结构erosion = cv2.erode(image, kernel, iterations=1)# 使用膨胀操作突出边缘dilation = cv2.dilate(erosion, kernel, iterations=1)# 通过膨胀后的与膨胀前的图像做差集,得到边界boundaries = cv2.subtract(dilation, erosion)# 保存边界图像cv2.imwrite(save_path, boundaries)print(f"边界图已保存:{save_path}")print("边界处理完毕!")# opencv 读入图像时  img.shape代表  H W C
# GT图像需要用灰度方式读入  里面像素只有两种 0 或者 255def main():# 图片文件夹根路径root_path = r'E:/project/pytorch-Project/MGNet-two-canny/TestDataset/COD10K/'# Imgs图像路径Imgs_path = os.path.join(root_path, 'Imgs')  # 替换为你的图片文件夹路径# GT图像路径GT_path = os.path.join(root_path, 'GT')  # 替换为你的图片文件夹路径# 全景纹理图存储路径Gradient_Canny_path = os.path.join(root_path, 'Gradient_Canny')# 前景纹理图存储路径Gradient_Foreground_path = os.path.join(root_path, 'Gradient_Foreground')# 边界图存储路径Edge_path = os.path.join(root_path, 'Edge')# 确保输出文件夹存在if not os.path.exists(Gradient_Canny_path):os.makedirs(Gradient_Canny_path)if not os.path.exists(Gradient_Foreground_path):os.makedirs(Gradient_Foreground_path)if not os.path.exists(Edge_path):os.makedirs(Edge_path)# 先对整张图像做canny检测canny_all(Imgs_path, Gradient_Canny_path)# 再生成前景纹理图canny_Foreground(GT_path, Gradient_Canny_path, Gradient_Foreground_path)# 生成边界图getEdge(GT_path,Edge_path)if __name__ == "__main__":main()

相关文章:

Imgs,GT,Edge,Gradient_all,Gradient_Foreground

保存一下: 做个记录: import cv2 import os import numpy as np# 对整张图片做canny检测 得到纹理图 def canny_all(input_path, output_path):# 遍历文件夹中的所有文件for filename in os.listdir(input_path):# 构造完整的文件路径image_path os.p…...

自学成才Flutter 弹性布局、线性布局

本文我们要介绍 Flutter 中布局 Widget,包括弹性布局、线性布局 流式布局和层叠布局。 Flutter中文网 Flutter开发 一、弹性布局--Flex Flex 类似 Android 中的 FlexboxLayout,和 Expanded 配合使用可以实现子Widget 按照一定比例来分配父容器空间。 使…...

Part 3.1 深度优先搜索

深度优先搜索(DFS),即按照深度优先的顺序搜索的算法。 深度优先搜索一般使用栈来实现。 [USACO1.5] 八皇后 Checker Challenge 题目描述 一个如下的 6 6 6 \times 6 66 的跳棋棋盘,有六个棋子被放置在棋盘上,使得…...

前端Vue小兔鲜儿电商项目实战Day03

一、Home - 整体结构搭建和分类实现 1. 页面结构 ①按照结构新增5个组件&#xff0c;准备最简单的模板&#xff0c;分别在Home模块的入口组件中引入 src/views/Home/components/ HomeCategory.vue HomeBanner.vue HomeNew.vue HomeHot.vue HomeProduct.vue <script …...

ORACLE 查询SQL优化

1 使用EXPLAIN PLAN 使用EXPLAIN PLAN查看查询的执行计划&#xff0c;这可以帮助你理解查询是如何被Oracle执行的。基于执行计划&#xff0c;你可以确定是否存在索引缺失、不必要的全表扫描等问题。 以下是几种使用EXPLAIN PLAN的方法&#xff1a; 使用EXPLAIN PLAN FOR: 你可以…...

Ansible03-Ansible Playbook剧本详解

目录 写在前面5. Ansible Playbook 剧本5.1 YAML语法5.1.1 语法规定5.1.2 示例5.1.3 YAML数据类型 5.2 Playbook组件5.3 Playbook 案例5.3.1 Playbook语句5.3.2 Playbook1 分发hosts文件5.3.3 Playbook2 分发软件包&#xff0c;安装软件包&#xff0c;启动服务5.3.3.1 任务拆解…...

Qt-qrencode生成二维码

Qt-qrencode开发-生成二维码&#x1f4c0; 文章目录 Qt-qrencode开发-生成二维码&#x1f4c0;[toc]1、概述&#x1f4f8;2、实现效果&#x1f4bd;3、编译qrencode&#x1f50d;4、在QT中引入编译为静态库的QRencode5、在Qt中直接使用QRencode源码6、在Qt中使用QRencode生成二…...

长安链使用Golang编写智能合约教程(三)

本篇主要介绍长安链Go SDK写智能合约的一些常见方法的使用方法或介绍 资料来源&#xff1a; 官方文档官方示例合约库 官方SDK接口文档 教程一&#xff1a;智能合约编写1 教程二&#xff1a;智能合约编写2 一、获取参数、获取状态、获取历史记录的方法解析 注意&#xff01; …...

Vercel deploy- Nextjs project error-URL link-env variable

Vercel deploy- Nextjs project error-URL link-env variable Error Check Database URL Check next-auth URL NEXTAUTH_URLhttps://yourappname.vercel.app/ 依次排查可能性 Application error: a server-side exception has occurred (see the server logs for more in…...

Java | Leetcode Java题解之第123题买卖股票的最佳时机III

题目&#xff1a; 题解&#xff1a; class Solution {public int maxProfit(int[] prices) {int n prices.length;int buy1 -prices[0], sell1 0;int buy2 -prices[0], sell2 0;for (int i 1; i < n; i) {buy1 Math.max(buy1, -prices[i]);sell1 Math.max(sell1, b…...

Ubuntu22.04之扩展并挂载4T硬盘(二百三十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…...

Redis实现延迟队列

最近用到一个延迟消息的功能&#xff0c;第一时间想到使用MQ或者MQ的插件&#xff0c;因为数据量不大&#xff0c;所以尝试使用Redis来实现了&#xff0c;毕竟Redis也天生支持类似MQ的队列消费&#xff0c;所以&#xff0c;在这里总结了一下Redis实现延迟消息队列的方式。 一、…...

如何准确查找论文数据库?

在学术研究过程中&#xff0c;查找相关论文是获取最新研究成果、支持自己研究的重要途径。准确查找论文数据库不仅可以节省时间&#xff0c;还能确保找到高质量的学术资源。本文将介绍一些有效的方法和策略&#xff0c;帮助您准确查找论文数据库。 1. 选择合适的数据库 不同的…...

翻译《The Old New Thing》- What a drag: Dragging a virtual file (IStream edition)

What a drag: Dragging a virtual file (IStream edition) - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20080319-00/?p23073 Raymond Chen 2008年03月19日 拖拽虚拟文件&#xff08;IStream 版本&#xff09; 上一次&#xff0c;我们看…...

【FPGA】Verilog语言从零到精通

接触fpga一段时间&#xff0c;也能写点跑点吧……试试系统地康康呢~这个需要耐心但是回报巨大的工作。正原子&&小梅哥 15_语法篇&#xff1a;Verilog高级知识点_哔哩哔哩_bilibili 1Verilog基础 Verilog程序框架&#xff1a;模块的结构 类比&#xff1a;c语言的基础…...

unity打包的WebGL部署到IIS问题

部署之后会出错&#xff0c;我遇到的有以下几种&#xff1b; 进度条卡住不动 明明已经部署到了IIS上&#xff0c;为什么浏览网页的时候还是过不去或者直接报错。 进度条卡住不动的问题其实就是wasm和data的错误。 此时在浏览器上按F12进入开发者模式查看错误&#xff08;下图…...

GPT-4o:人工智能的新里程碑

GPT-4o&#xff0c;作为OpenAI最新推出的人工智能技术&#xff0c;无疑在人工智能领域掀起了新一轮的浪潮。这款新型的语言模型不仅继承了GPT系列的核心优势&#xff0c;更在多个方面实现了突破性的进展。以下&#xff0c;我们将从版本间的对比分析、GPT-4o的技术能力以及个人整…...

发现一个ai工具网站

网址 https://17yongai.com/ 大概看了下&#xff0c;这个网站收集的数据还挺有用的&#xff0c;有很多实用的ai教程。 懂ai工具的可以在这上面找找灵感。...

第二十五章新增H5基础(以及视频~兼容)

1.HTML5中新增布局标签 HTML5新增了页眉&#xff0c;页脚&#xff0c;内容块等文档结构相关标签&#xff0c;可以使文档结构更加清晰明了。 1.新增的结构标签 1、<header>标签 定义文档或者文档中内容块的页眉。通常可以包含整个页面或一个内容区域的标题&#xff0c…...

[英语单词] production quality

Our goal is to implement a production quality switch platform that supports standard management interfaces and opens the forwarding functions to programmatic extension and control. 说在openswitch的文档里有说这两词&#xff0c;含义是产品质量。是production修…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...