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个组件,准备最简单的模板,分别在Home模块的入口组件中引入 src/views/Home/components/ HomeCategory.vue HomeBanner.vue HomeNew.vue HomeHot.vue HomeProduct.vue <script …...
ORACLE 查询SQL优化
1 使用EXPLAIN PLAN 使用EXPLAIN PLAN查看查询的执行计划,这可以帮助你理解查询是如何被Oracle执行的。基于执行计划,你可以确定是否存在索引缺失、不必要的全表扫描等问题。 以下是几种使用EXPLAIN PLAN的方法: 使用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 分发软件包,安装软件包,启动服务5.3.3.1 任务拆解…...

Qt-qrencode生成二维码
Qt-qrencode开发-生成二维码📀 文章目录 Qt-qrencode开发-生成二维码📀[toc]1、概述📸2、实现效果💽3、编译qrencode🔍4、在QT中引入编译为静态库的QRencode5、在Qt中直接使用QRencode源码6、在Qt中使用QRencode生成二…...
长安链使用Golang编写智能合约教程(三)
本篇主要介绍长安链Go SDK写智能合约的一些常见方法的使用方法或介绍 资料来源: 官方文档官方示例合约库 官方SDK接口文档 教程一:智能合约编写1 教程二:智能合约编写2 一、获取参数、获取状态、获取历史记录的方法解析 注意! …...

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
题目: 题解: 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硬盘(二百三十三)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
Redis实现延迟队列
最近用到一个延迟消息的功能,第一时间想到使用MQ或者MQ的插件,因为数据量不大,所以尝试使用Redis来实现了,毕竟Redis也天生支持类似MQ的队列消费,所以,在这里总结了一下Redis实现延迟消息队列的方式。 一、…...

如何准确查找论文数据库?
在学术研究过程中,查找相关论文是获取最新研究成果、支持自己研究的重要途径。准确查找论文数据库不仅可以节省时间,还能确保找到高质量的学术资源。本文将介绍一些有效的方法和策略,帮助您准确查找论文数据库。 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日 拖拽虚拟文件(IStream 版本) 上一次,我们看…...

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

unity打包的WebGL部署到IIS问题
部署之后会出错,我遇到的有以下几种; 进度条卡住不动 明明已经部署到了IIS上,为什么浏览网页的时候还是过不去或者直接报错。 进度条卡住不动的问题其实就是wasm和data的错误。 此时在浏览器上按F12进入开发者模式查看错误(下图…...
GPT-4o:人工智能的新里程碑
GPT-4o,作为OpenAI最新推出的人工智能技术,无疑在人工智能领域掀起了新一轮的浪潮。这款新型的语言模型不仅继承了GPT系列的核心优势,更在多个方面实现了突破性的进展。以下,我们将从版本间的对比分析、GPT-4o的技术能力以及个人整…...

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

第二十五章新增H5基础(以及视频~兼容)
1.HTML5中新增布局标签 HTML5新增了页眉,页脚,内容块等文档结构相关标签,可以使文档结构更加清晰明了。 1.新增的结构标签 1、<header>标签 定义文档或者文档中内容块的页眉。通常可以包含整个页面或一个内容区域的标题,…...
[英语单词] 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的文档里有说这两词,含义是产品质量。是production修…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...

相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...