EfficientSAM分割对象后求其中图像中的高

news2024/11/15 17:31:09

1 分割对象

EfficientSAM

https://github.com/yformer/EfficientSAM

2 计算在图像中最高点即y值最小点

import os
import cv2

def read_images(folder_path):
    image_files = [f for f in os.listdir(folder_path) if
                   f.endswith(".jpg") or f.endswith(".png")]  # 获取文件夹中所有的jpg和png图片文件
    sorted_image_files = sorted(image_files, key=lambda x: int(''.join(filter(str.isdigit, os.path.splitext(x)[0]))))

    images = []  # 用来存储读取的图像
    for filename in sorted_image_files:
        # print(filename)
        image_path = os.path.join(folder_path, filename)  # 构建完整的文件路径
        image = cv2.imread(image_path)  # 使用OpenCV库读取图像文件
        # image = cv2.resize(image, (0, 0), fx=0.5, fy=0.5, interpolation=cv2.INTER_LINEAR)

        images.append(image)  # 将图像添加到列表中

    return images

def reprocess_image(img):
    # 读入图片
    # for i in range(len(images)):
    # img = images[i]
    # 显示图片
    # 将彩色图片转换成灰度图像
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # 二值化处理
    # ret, thresh = cv2.threshold(gray, 50, 255, 0)
    # cv2.imshow("Binary Image", thresh)
    # cv2.waitKey(0)

    contour_image = img.copy()
    # 直接用灰度图寻找轮廓
    contours, hierarchy = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    # 二值化处理后的图像再处理轮廓
    # contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    cv2.drawContours(contour_image, contours, -1, (0, 255, 0), 3)
    cv2.imshow("contour_image", contour_image)
    cv2.waitKey(0)
    return contours, img

def find_highest_y_point(contours, img):
    _highest_point = (0, 0)
    max_y = img.shape[0]
    for contour in contours:
        for point in contour:
            if point[0][1] < max_y:
                max_y = point[0][1]
                _highest_point = (point[0][0], point[0][1])
                # print(highest_point[0])
                # print(highest_point[1])

    # 在图像上标记最高点
    cv2.circle(img, _highest_point, 5, (0, 0, 255), -1)
    # 显示结果
    cv2.imshow('Highest Point', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    return _highest_point

if __name__ == '__main__':
    folder_path = "final-images"  # 替换为你的文件夹路径
    highest_point = (0, 0)
    real_highest_y = 300
    if(read_images(folder_path) is not None):
        print("读取成功")
        print(len(read_images(folder_path)))
        for _image in read_images(folder_path):
            contours, img = reprocess_image(_image)
            highest_point = find_highest_y_point(contours, img)
            real_highest_y = img.shape[0] - highest_point[1]
            real_highest_y *= 0.25
            # print("最高点坐标:", highest_point)
            # print("最高点x坐标:", highest_point[0])
            # print("最高点y坐标:", highest_point[1])
            print(real_highest_y)
    else:
        print("读取失败")

分割后的图像

结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1688689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OSPF状态机及网络接口类型

、OSPF 状态机 Down一旦接收到hello 包进人下一个状态机 Init 初始化接收到的hello 包中&#xff0c;若存在本地的 RID&#xff0c;进入下一状态 2way 双向通讯--邻居关系建立的标志 条件匹配:点到点网络直接进入下一个状态机 MA 网络将进行 DR/BDR 选举(40S) 非 DR…

安卓数据存储(键值对、数据库、存储卡、应用组件Application、共享数据)

键值对 此小节介绍Android的键值对存储方式的使用方法&#xff0c;其中包括&#xff1a;如何将数据保存到共享参数&#xff0c;如何从共享参数读取数据&#xff0c;如何使用共享参数实现登陆页面的记住密码功能&#xff0c;如何使用Jetpack集成的数据仓库。 共享参数的用法 …

Linux笔记之命令行JSON处理器jq

Linux笔记之命令行JSON处理器jq code review! 文章目录 Linux笔记之命令行JSON处理器jq1.安装2.jq 基本用法3.例程3.1. 示例JSON文件3.2. 读取特定字段3.3. 管道过滤器&#xff08;Pipe Filters&#xff09;3.4. 映射过滤器&#xff08;Map Filters&#xff09;3.5. 条件过滤…

python使用jsonpath来查找key并赋值

目录 一、引言 二、JsonPath简介 三、Python中的JsonPath库 四、使用JsonPath查找JSON Key 五、使用JsonPath赋值JSON Key 六、高级用法 七、结论 一、引言 在数据驱动的现代应用中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;已成为一种广泛使…

使用echarts配置中国地图

使用echarts配置中国地图 首先要下载地图的geoJSON数据&#xff0c;有两个方式下载&#xff0c;一种是去echarts的github资源文件里面&#xff0c;一种是去阿里云的datav网站。 1.1 echarts文档下载中国地图json数据 1.2 阿里云datav 新建项目&#xff0c;新建index.html,下…

HeyGen AI是什么?怎样使用HeyGen AI?

在数字时代&#xff0c;视频内容为王。无论是在社交媒体还是网站上&#xff0c;视频都以其独特的方式吸引着人们的眼球。然而&#xff0c;制作出专业水准的视频往往需要大量的时间和技术知识。HeyGen AI正是为了解决这一难题而诞生的。 HeyGen AI简介 HeyGen AI是一个创新的视…

做抖音小店需要清楚的5个核心点!

大家好&#xff0c;我是喷火龙。 不管你是在做抖音小店&#xff0c;还是在做其他的电商平台&#xff0c;如果已经做了一段时间了&#xff0c;但还是没有拿到什么结果&#xff0c;我所指的结果不是什么大结果&#xff0c;而是连温饱都解决不了&#xff0c;甚至说还在亏钱。 有…

ICLR 2024现场精彩回顾 机器学习大牛们的“踩高跷秀”嗨翻全场

会议之眼 快讯 2024年5月7-11日&#xff0c;第12届ICLR(International Conference on Learning Representations)即国际学习表征会议已经在奥地利维也纳展览中心圆满结束&#xff01;国际学习表征会议&#xff08;ICLR&#xff09;作为机器学习领域的顶级会议之一&#xff0c;…

Threejs路径规划_基于A*算法案例V2

路径规划算法中有两种算法使用最普遍&#xff0c;第一个是Dijkstr算法&#xff0c;第二个是A*算法&#xff0c;两个算法各有千秋&#xff0c;Dijkstra算法可以保证最优解&#xff0c;但是复杂度较高&#xff0c;尤其当点数量较多时&#xff0c;A*算法是一种启发式搜索算法&…

Offline RL : Beyond Reward: Offline Preference-guided Policy Optimization

ICML 2023 paper code preference based offline RL&#xff0c;基于HIM&#xff0c;不依靠额外学习奖励函数 Intro 本研究聚焦于离线偏好引导的强化学习&#xff08;Offline Preference-based Reinforcement Learning, PbRL&#xff09;&#xff0c;这是传统强化学习&#x…

设计模式13——桥接模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 桥接模式&#xff08;Bridge&a…

Hsql每日一题 | day02

前言 就一直向前走吧&#xff0c;沿途的花终将绽放~ 题目&#xff1a;主播同时在线人数问题 如下为某直播平台主播开播及关播时间&#xff0c;根据该数据计算出平台最高峰同时在线的主播人数。 id stt edt 1001,2021-06-14 12:12:12,2021-06-14 18:1…

makefile 编写规则

1.概念 1.1 什么是makefile Makefile 是一种文本文件&#xff0c;用于描述软件项目的构建规则和依赖关系&#xff0c;通常用于自动化软件构建过程。它包含了一系列规则和指令&#xff0c;告诉构建系统如何编译和链接源代码文件以生成最终的可执行文件、库文件或者其他目标文件…

【杂七杂八】Huawei Gt runner手表系统降级

文章目录 Step1&#xff1a;下载安装修改版华为运动与健康Step2&#xff1a;在APP里进行配置Step3&#xff1a;更新固件(时间会很长) 目前在使用用鸿蒙4 111版本的手表系统&#xff0c;但是感觉睡眠检测和运动心率检测一言难尽&#xff0c;于是想到是否能回退到以前的版本&…

NFT Insider #131:Mocaverse NFT市值破3.5万ETH,The Sandbox 参加NFCsummit

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members&#xff08;https://twitter.com/WHALEMembers&#xff09;、BeepCrypto &#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、…

element-ui手机区号+手机号

需求场景 项目开发中对方要求手机号带上全球区号 需求分析 项目使用的是若依前端框架&#xff0c;element-ui的框架。尝试使用已经网上的组件vue-country-intl等发现不怎么适配element-ui的样式等。这还不是关键的&#xff0c;关键的是弹窗中使用这些组件发现区号的下拉展示框…

OpenFeign快速入门 替代RestTemplate

1.引入依赖 <!--openFeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--负载均衡器--><dependency><groupId>org.spr…

本特利330103-03-09-10-02-00 PLC模块技术分析与应用探讨

本特利330103-03-09-10-02-00 PLC模块技术分析与应用探讨 一、引言 在工业自动化领域中&#xff0c;可编程逻辑控制器&#xff08;PLC&#xff09;作为核心控制设备&#xff0c;其性能的稳定性和可靠性直接关系到整个生产线的运行效率。本特利&#xff08;Bentley&#xff09;…

2.行为参数的演变过程

2.行为参数的演变过程 ​ 行为参数化是软件开发模式&#xff0c;可以处理频繁变更的需求。它让你把一个代码块准备好但不执行&#xff0c;以后可以被其他部分调用&#xff0c;也可以作为参数传递给另一个方法&#xff0c;推迟执行。这样&#xff0c;方法的行为就基于参数化的代…

一文深度剖析 ColBERT

近年来&#xff0c;向量搜索领域经历了爆炸性增长&#xff0c;尤其是在大型语言模型&#xff08;LLMs&#xff09;问世后。学术界开始重点关注如何通过扩展训练数据、采用先进的训练方法和新的架构等方法来增强 embedding 向量模型。 在之前的文章中&#xff0c;我们已经深入探…