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

python读取图像小工具

一、和图像交互获得图像的坐标和像素值

import cv2
import numpy as np
import signal
import threading
import timeif __name__ == '__main__':img = cv2.imread('XXX',0)#读取图片font_face,font_scale,thickness=cv2.FONT_HERSHEY_SIMPLEX,0.5,1#鼠标交互def mouseHandler(event,x,y,flags,param):points = (x,y)global imgCopy#鼠标左键双击事件if event == cv2.EVENT_LBUTTONDBLCLK:#拷贝一张与原图像格式相同的新图像imgCopy = img.copy()#拼接文字text = '['+str(x)+','+str(y)+']'+str(img[y,x])print(text)#读取文字(宽,高),下基线(t_w,t_h),baseLine = cv2.getTextSize(text,font_face,font_scale,thickness)#在鼠标当前位置的左上角显示文字cv2.putText(imgCopy,text,(x-t_w,y),font_face,font_scale,(125,125,125))cv2.imshow('win',imgCopy)#鼠标移动事件elif event == cv2.EVENT_MOUSEMOVE:#显示原图片能使文本框消失cv2.imshow('win',img)cv2.namedWindow('win')#窗口与回调函数绑定cv2.setMouseCallback('win',mouseHandler)cv2.imshow('win',img)cv2.waitKey()

二、二值化图像

import cv2
import numpy as np
import signal
import threading
import timeif __name__ == '__main__':img = cv2.imread('path',0)#读取图片ret, binary = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)print("threshold value %s" % ret)  #打印阈值,超过阈值显示为白色,低于该阈值显示为黑色cv2.imshow("threshold", binary) #显示二值化图像cv2.waitKey(0)cv2.destroyAllWindows()

批量图像二值化

import cv2
import numpy as np
import signal
import threading
import time
import os
import sys
import random
import datetime
import argparsedef get_files(path):files = []for filename in os.listdir(path):if os.path.isfile(os.path.join(path, filename)):files.append(filename)return filesif __name__ == '__main__':files_path="XXX"#print(files_path)image_files = get_files(files_path)i=1#print(image_files)for image_file in image_files:image_path=os.path.join(files_path , image_file)print(image_path)img = cv2.imread(image_path,0)#读取图片start_time_init = time.perf_counter()ret, binary = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)end_time_init = time.perf_counter()elapsed_time_init = (end_time_init - start_time_init)*1000print("二值化时间: {} ms".format(elapsed_time_init))print("threshold value %s" % ret)  #打印阈值,超过阈值显示为白色,低于该阈值显示为黑色scv2.imwrite(files_path+"/binary/"+str(i)+".png",binary)i=i+1

三、区域合并提取最大连通域

import cv2
import numpy as np
import signal
import threading
import time
import os
import sys
import random
import datetime
import argparsedef get_files(path):files = []for filename in os.listdir(path):if os.path.isfile(os.path.join(path, filename)):files.append(filename)return filesif __name__ == '__main__':#files_path="/home/robot/PaddleOCR-2.6.0/data/OK0828/raw_data/"files_path="/home/robot/PaddleOCR-2.6.0/data/829/"files_path="/home/robot/PaddleOCR-2.6.0/data/NG0823/"#print(files_path)image_files = get_files(files_path)i=1#print(image_files)for image_file in image_files:image_path=os.path.join(files_path , image_file)print(image_path)img = cv2.imread(image_path,0)#读取图片start_time_init = time.perf_counter()ret, binary = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)end_time_init = time.perf_counter()elapsed_time_init = (end_time_init - start_time_init)*1000print("二值化时间: {} ms".format(elapsed_time_init))print("threshold value %s" % ret)  #打印阈值,超过阈值显示为白色,低于该阈值显示为黑色scv2.imwrite(files_path+"/binary/"+str(i)+".png",binary)i=i+1# cv2.imshow("threshold", binary) #显示二值化图像# cv2.waitKey(0)# cv2.destroyAllWindows()start_time = time.perf_counter()num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(binary)end_time = time.perf_counter()elapsed_time = (end_time - start_time)*1000print("连通域的时间: {} ms".format(elapsed_time))max_area=0j=0for st in stats[1:]:j=j+1area=st[4]if(max_area<area):max_area=areaindex=jprint("index",index)print("max_area",max_area)#index=index+1print('num_labels: ', num_labels)labels[labels>0] = 255labels = labels.astype(np.uint8)# #将一维灰度图像扩展到三维labels= np.expand_dims(labels,axis=2).repeat(3,axis=2).astype(np.uint8)# for st in stats[1:]:cv2.rectangle(labels, (stats[index][0], stats[index][1]), (stats[index][0]+stats[index][2], stats[index][1]+stats[index][3]), (0, 255, 0), 3)#cv2.imshow('labels', labels)#cv2.waitKey(0)cv2.imwrite(files_path+"/labels/"+str(i)+".png",labels)

相关文章:

python读取图像小工具

一、和图像交互获得图像的坐标和像素值 import cv2 import numpy as np import signal import threading import timeif __name__ __main__:img cv2.imread(XXX,0)#读取图片font_face,font_scale,thicknesscv2.FONT_HERSHEY_SIMPLEX,0.5,1#鼠标交互def mouseHandler(event,x…...

【ES6】JavaScript中Reflect

Reflect是JavaScript中的一个内建对象&#xff0c;它提供了一组方法&#xff0c;用于对对象和函数进行操作和检查。这些方法与内建对象的方法非常相似&#xff0c;但具有更高的灵活性。 以下是Reflect对象的一些常用方法&#xff1a; 1、Reflect.apply(target, thisArgument,…...

Ajax + Promise复习简单小结simple

axios使用 先看看老朋友 axios axios是基于Ajaxpromise封装的 看一下他的简单使用 安装&#xff1a;npm install axios --save 引入&#xff1a;import axios from axios GitHub地址 基本使用 axios({url: http://hmajax.itheima.net/api/province}).then(function (result…...

WebDAV之π-Disk派盘 + 小书匠

小书匠是一款功能丰富,强大的知识管理工具。全平台覆盖,离线数据存储,自定义数据服务器,所见即所得的 markdown 编辑体验。 小书匠提供了多种实用的编辑模式,例如:栏编辑、双栏编辑、三栏编辑、全屏写作、全屏阅读等。并且该软件还提供了许多有用的扩展语法,比如Latex公…...

LTE ATTACH流程、PDN流程、PGW地址分配介绍

1、S-GW\P-GW选择 MME根据S-GW和P-GW的拓扑信息进行S-GW/P-GW的选择&#xff0c;在S-GW的候选序列和P-GW的候选序列中比较&#xff0c;寻找是否有合一的S-GW/P-GW&#xff0c;并且根据S-GW的优先级和权重信息进行排序&#xff0c;得到S-GW/P-GW的候选组。 2、SGW>PGW连接 PD…...

SQL sever中用户管理

目录 一、用户管理常见方法 二、用户管理方法示例 2.1. 创建登录账户&#xff1a; 2.1.1 检查是否创建账户成功&#xff1a; 2.2. 创建数据库用户&#xff1a; 2.2.1检查用户是否创建成功&#xff1a; 2.3. 授予权限&#xff1a; 2.3.1授予 SELECT、INSERT 和 U…...

linux————pxe网络批量装机

目录 一、概述 什么是pxe pxe组件 二、搭建交互式pxe装机 一、配置基础环境 二、配置vsftpd 三、配置tftp 四、准备pxelinx.0文件、引导文件、内核文件 一、准备pxelinux.0 二、准备引导文件、内核文件 五、配置dhcp 一、安装dhcp 二、配置dhcp 六、创建default文…...

处理时延降低24倍,联通云粒数据引擎优化实践

*作者&#xff1a;郑扬勇&#xff0c;云粒星河数据中台产品负责人 云粒智慧科技有限公司成立于 2018 年 6 月&#xff0c;是中国联通集团混改以来成立的首家合资公司&#xff0c;是中国智慧城市数智化建设者。一直以来&#xff0c;云粒智慧以数字化、智能化、集约化产品为核心&…...

学习MATLAB

今日&#xff0c;在大学慕课上找了一门关于MATLAB学习的网课&#xff0c;MATLAB对于我们这种自动化的学生应该是很重要的&#xff0c;之前也是在大三的寒假做自控的课程设计时候用到过&#xff0c;画一些奈奎斯特图&#xff0c;根轨迹图以及伯德图&#xff0c;但那之后也就没怎…...

React 18 对 state 进行保留和重置

参考文章 对 state 进行保留和重置 各个组件的 state 是各自独立的。根据组件在 UI 树中的位置&#xff0c;React 可以跟踪哪些 state 属于哪个组件。可以控制在重新渲染过程中何时对 state 进行保留和重置。 UI 树 浏览器使用许多树形结构来为 UI 建立模型。DOM 用于表示 …...

MySQL之事务与引擎

目录 一、事物 1、事务的概念 2、事务的ACID特点 3、事务之间的相互影响 4、Mysql及事务隔离级别(四种) 1、查询会话事务隔离级别 2、查询会话事务隔离级别 3、设置全局事务隔离级别 4、设置会话事务隔离级别 5、事务控制语句 6、演示 1、测试提交事务 2、测试事务回滚 4…...

Flink集群常见的监控指标

为确保能够全面、实时地监控Flink集群的运行状态和性能指标。以下是监控方案的主要组成部分&#xff1a; Flink集群概览&#xff1a;通过访问Flink的JobManager页面&#xff0c;您可以获取集群的总体信息&#xff0c;包括TaskManager的数量、任务槽位数量、运行中的作业以及已…...

React常见知识点

1. setCount(10)与setCount(preCount > preCount 10) 的区别&#xff1a; import React, { useState } from react; export default function CounterHook() {const [count, setCount] useState(() > 10);console.log(CounterHook渲染);function handleBtnClick() {//…...

Vue-router路由

配置路由 相当于SpringMVC的Controller 路径然后&#xff0c;跳转到对应的组件 一键生成前端项目文档...

JVM-CMS

when 堆大小要求为4-8G 原理 初始标记&#xff1a;执行CMS线程->STW&#xff0c;标记GC Root直接关联的对象->低延迟 并发标记&#xff1a;执行CMS线程和业务线程&#xff0c;从GC Root直接关联的对象开始遍历整个对象图 重新标记&#xff1a;执行CMS线程->STW&a…...

无涯教程-Flutter - Dart简介

Dart是一种开源通用编程语言&#xff0c;它最初是由Google开发的&#xff0c; Dart是一种具有C样式语法的面向对象的语言&#xff0c;它支持诸如接口&#xff0c;类之类的编程概念&#xff0c;与其他编程语言不同&#xff0c;Dart不支持数组&#xff0c; Dart集合可用于复制数据…...

如何创建美观的邮件模板并通过qq邮箱的SMTP服务向用户发送

最近在写注册功能的自动发送邮箱告知验证码的功能&#xff0c;无奈根本没有学过前端&#xff0c;只有写Qt的qss基础&#xff0c;只好借助网页设计自己想要的邮箱格式&#xff0c;最终效果如下: 也推销一下自己的项目ShaderLab&#xff0c;可运行ShaderToy上的大部分着色器代码&…...

手机无人直播软件在苹果iOS系统中能使用吗?

在现代社交媒体的时代&#xff0c;直播带货已经成为了一种热门的销售途径。通过直播&#xff0c;人们可以远程分享自己的商品&#xff0c;与观众进行互动&#xff0c;增强沟通和参与感。而如今&#xff0c;手机无人直播软件更是成为了直播带货领域的一项火爆的技术。那么&#…...

创建2个线程并执行(STL/Windows/Linux)

C并发编程入门 目录 STL 写法 #include <thread> #include <iostream> using namespace std;void thread_fun1(void) {cout << "one STL thread 1!" << endl; }void thread_fun2(void) {cout << "one STL thread 2!" <…...

Redis可以干什么

Redis可以做什么&#xff1f; 缓存 Redis作为一款高性能的缓存数据库&#xff0c;能够将常用的数据存储在内存中&#xff0c;以提高读写效率。它支持多种数据结构&#xff0c;如字符串、哈希表、列表、集合等&#xff0c;让你可以根据业务需求选择合适的数据结构进行缓存。 …...

5015系列圆形连接器选型避坑指南

【导语】 在做工业设备或者车载系统时&#xff0c;连接器看似一个小零件&#xff0c;却往往是整个系统失效的重灾区。最近在复盘几个项目故障案例时发现&#xff0c;很多工控设备在振动和潮湿环境下宕机&#xff0c;根源都出在连接器选型不当上。今天我们就来深扒一下业内经典的…...

好书推荐《VirtualLab Fusion入门与进阶实用教程(第二版)》

目 录第一章 VirtualLab Fusion理论基础 1 1.1 几何光学和光线追迹 1 1.2 物理光学和光场追迹 1 1.2.1 统一场追迹 3 1.2.2 第二代场追迹 6 第二章 VirtualLab Fusion安装与更新 10 2.1 VirtualLab 版本说明及系统配置要求 10 2.2 VirtualLab安装与更新 11 2.3 安装过程中可能遇…...

AR 巡检:6 大黄金行业与厂商推荐

AR 巡检是将增强现实技术与工业巡检流程深度融合的智能运维方案&#xff0c;核心作用是通过虚实叠加实现设备状态可视化、巡检流程标准化与故障诊断智能化。传统巡检依赖纸质记录、人工记忆和经验判断&#xff0c;存在漏检误检率高、数据无法实时同步、故障排查周期长等问题&am…...

DeepSeek-R1 MoE架构逆向工程报告(基于HuggingFace源码+NCCL trace分析):专家粒度、FFN维度与token路由热力图首次披露

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;DeepSeek-R1 MoE架构逆向工程总览 DeepSeek-R1 是一款基于稀疏混合专家&#xff08;Mixture of Experts, MoE&#xff09;架构的大语言模型&#xff0c;其推理与训练行为在公开文档中未完全披露。本章聚焦于通…...

别再死磕原生OpenStack了!华为云Stack HCS 8.0的极简部署与高可用设计,真香!

华为云Stack HCS 8.0&#xff1a;企业私有云部署的革命性突破 当企业IT架构师面对私有云平台选型时&#xff0c;部署复杂性和系统可靠性往往成为最令人头疼的两大难题。原生OpenStack以其高度灵活性和开源特性吸引了大量技术团队&#xff0c;但随之而来的却是漫长的部署周期、繁…...

开关电源功率因数校正:从谐波失真到PFC电路设计实践

1. 项目概述&#xff1a;从“相移”到“失真”&#xff0c;理解开关整流器的功率因数挑战在通信、数据中心乃至我们日常使用的各类开关电源适配器中&#xff0c;高频开关整流器是电能转换的核心。作为一名电源工程师&#xff0c;我经常被问到&#xff1a;“为什么我们设备的输入…...

旧房改造完整施工流程

旧房改造是一项复杂而细致的工程&#xff0c;不仅需要专业的技术&#xff0c;还需要科学合理的规划。以下是旧房改造的完整施工流程&#xff0c;帮助您更好地了解整个过程。一、前期准备1. 现场勘测具体操作&#xff1a;专业人员对房屋进行全面检查&#xff0c;包括墙体老化、漏…...

除了连接模拟器,AppInventor开发者还应该知道的3个‘坑’:录音、短信模块与API调用限制

避开AppInventor开发中的三大隐形陷阱&#xff1a;录音、短信与API调用实战指南 当你成功连接AppInventor模拟器&#xff0c;准备大展拳脚开发应用时&#xff0c;可能会突然发现某些功能"神秘失效"——录音按钮点击无反应、短信发送模块形同虚设、API调用慢如蜗牛。这…...

双向脑机接口:从神经信号解码到感觉编码的核心原理与挑战

1. 从科幻到现实&#xff1a;双向脑机接口的演进与核心挑战十几年前&#xff0c;当我第一次在学术会议上看到猴子用意念控制机械臂抓取食物的视频时&#xff0c;那种震撼至今记忆犹新。那时&#xff0c;脑机接口&#xff08;BCI&#xff09;还只是顶级实验室里昂贵的“魔术”。…...

你的动漫图片为什么总是不够清晰?3个步骤让AI帮你还原4K级画质

你的动漫图片为什么总是不够清晰&#xff1f;3个步骤让AI帮你还原4K级画质 【免费下载链接】Real-ESRGAN Real-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration. 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN 想象一…...