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)

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

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

相关文章

【校招VIP】前端算法考点之大数据相关

考点介绍&#xff1a; 大数据的关键技术分为分析技术和处理技术&#xff0c;可用于大数据分析的关键技术主要包括A/B测试&#xff0c;关联规则挖掘&#xff0c;数据挖掘&#xff0c;集成学习&#xff0c;遗传算法&#xff0c;机器学习&#xff0c;自然语言处理&#xff0c;模式…

Oracle中LEFT JOIN后AND与WHERE的异同

1、AND 过滤之后再连接 2、WHERE 连接之后再过滤 下面以具体例子来说明&#xff1a; (1)、建表及插入测试数据 --建测试表 create table FACT_TAB ( ID INTEGER,STATUS VARCHAR2(8) ); create table DIM_STATUS ( STSTUS_CLASS VARCHAR2(8),STATUS_CODE VARCHAR2(8),S…

Spring框架知识点汇总

01.Spring框架的基本理解 关键字&#xff1a;核心思想IOC/AOP&#xff0c;作用&#xff08;解耦&#xff0c;简化&#xff09;&#xff0c;简单描述框架组成&#xff1b; Spring框架是一款轻量级的开发框架&#xff0c;核心思想是IOC&#xff08;反转控制&#xff09;和AOP&a…

沐风老师3DMAX厨房橱柜生成器KitchenCabinetGenerator教程

3DMAX厨房橱柜生成器插件使用方法 3DMAX橱柜生成器KitchenCabinetGenerator是一个在3dMax中自动创建三维橱柜模型的高效脚本。它有多种风格的台面、门和橱柜&#xff0c;可以灵活地应用于Archviz项目&#xff0c;同时为3D艺术家节省大量时间。 【适用版本】 1.3dMax2018 – 20…

从零构建深度学习推理框架-10 算子的执行流程

计算图的设计 Graph的结构 Operators: 记录所有的节点Input operator: 指定的输入节点Output operator: 指定的输出节点Global input data: 模型的外部全局输入&#xff08;用户指定的输入&#xff09; Operator的结构 Input data: 节点的输入数据Output data: 节点的输出数…

系统架构技能之设计模式-单件模式

一、开篇 其实我本来不是打算把系统架构中的一些设计模式单独抽出来讲解的&#xff0c;因为很多的好朋友也比较关注这方面的内容&#xff0c;所以我想通过我理解及平时项目中应用到的一 些常见的设计模式,拿出来给大家做个简单讲解&#xff0c;我这里只是抛砖引玉&#xff0c…

ArmSoM-W3 DDR压力测试

1. 简介 专栏总目录 ArmSoM团队在产品量产之前都会对产品做几次专业化的功能测试以及性能压力测试&#xff0c;以此来保证产品的质量以及稳定性 优秀的产品都要进行多次全方位的功能测试以及性能压力测试才能够经得起市场的检验 2. 环境介绍 硬件环境&#xff1a; ArmSoM-W…

任意文件读取

文章目录 渗透测试漏洞原理任意文件读取1. 任意文件读取概述1.1 漏洞成因1.2 漏洞危害1.3 漏洞分类1.4 任意文件读取1.4.1 文件读取1.4.2 任意文件读取1.4.3 权限问题 1.5 任意文件下载1.5.1 一般情况1.5.2 PHP实现1.5.3 任意文件下载 2. 任意文件读取攻防2.1 路径过滤2.1.1 过…

字符设备驱动(内核态用户态内存交互)

前言 内核驱动&#xff1a;运行在内核态的动态模块&#xff0c;遵循内核模块框架接口&#xff0c;更倾向于插件。 应用程序&#xff1a;运行在用户态的进程。 应用程序与内核驱动交互通过既定接口&#xff0c;内核态和用户态访问依然遵循内核既定接口。 环境搭建 系统&#…

Maven 基础之安装和命令行使用

Maven 的安装和命令行使用 1. 下载安装 下载解压 maven 压缩包&#xff08;http://maven.apache.org/&#xff09; 配置环境变量 前提&#xff1a;需要安装 java 。 在命令行执行如下命令&#xff1a; mvn --version如出现类似如下结果&#xff0c;则证明 maven 安装正确…

【100天精通python】Day49:python web编程_web框架,Flask的使用

目录 1 Web 框架 2 python 中常用的web框架 3 Flask 框架的使用 3.1 Flask框架安装 3.2 第一个Flask程序 3.3 路由 3.3.1 基本路由 3.3.2 动态路由 3.3.3 HTTP 方法 3.3.4 多个路由绑定到一个视图函数 3.3.5 访问URL 参数的路由 3.3.6 带默认值的动态路由 3.3.7 带…

文件读取漏洞复现(Metinfo 6.0.0)

安装环境 安装phpstudy&#xff0c;下载MetInfo 6.0.0版本软件&#xff0c;复制到phpstudy目录下的www目录中。 打开phpstudy&#xff0c;访问浏览器127.0.0.1/MetInfo6.0.0/install/index.php&#xff0c;打开Meinfo 6.0.0主页&#xff1a; 点击下一步、下一步&#xff0c…

深入理解css3背景图边框

border-image知识点 重点理解 border-image-slice 设置的值将边框背景图分为9份&#xff0c;图像中间的舍弃&#xff0c;其他部分图像对应边框的相应区域放置&#xff0c;上右下左四角固定&#xff0c;border-image-repeat设置的是除四角外其他部分的显示方式。 截图来自菜鸟教…

【锁】定时任务推送数据-redission加锁实例优化

文章目录 redission 加锁代码-有问题优化代码看门狗是什么&#xff1f; redission 加锁代码-有问题 /*** 收货入库物料标签(包装码)推送接口** throws Exception*/public void synReceiveMaterialTags() throws Exception {String tag DateFormatUtils.format(new Date(), &qu…

spring事务详解

spring事务整体流程&#xff08;图画的不是很细节&#xff0c;但是大体流程体现出来了&#xff09; 一、EnableTransactionManagement工作原理 开启Spring事务本质上就是增加了一个Advisor&#xff0c;但我们使用EnableTransactionManagement注解来开启Spring事务是&#xff…

设计模式-迭代器

文章目录 1. 引言1.1 概述1.2 设计模式1.3 迭代器模式的应用场景1.4 迭代器模式的作用 2. 基本概念2.1 迭代器 Iterator2.2 聚合 Aggregate2.3 具体聚合 ConcreteAggregate 3. Java 实现迭代器模式3.1 Java 集合框架3.2 Java 迭代器接口3.3 Java 迭代器模式实现示例 4. 迭代器模…

打破数据孤岛!时序数据库 TDengine 与创意物联感知平台完成兼容性互认

新型物联网实现良好建设的第一要务就是打破信息孤岛&#xff0c;将数据汇聚在平台统一处理&#xff0c;实现数据共享&#xff0c;放大物联终端的行业价值&#xff0c;实现系统开放性&#xff0c;以此营造丰富的行业应用环境。在此背景下&#xff0c;物联感知平台应运而生&#…

BOM对MES管理系统的影响与作用

在建设MES管理系统中&#xff0c;BOM&#xff08;物料清单&#xff09;具有至关重要的作用。它提供了产品的组成部分和结构信息&#xff0c;支持生产过程的监控、协调和管理。本文将详细探讨BOM在MES管理系统中的影响和作用。 一、生产过程指导 BOM为MES系统提供了产品的组成部…

centos中得一些命令 记录

redis命令 链接redis数据库的命令 redis-cli如果 Redis 服务器在不同的主机或端口上运行&#xff0c;你需要提供相应的主机和端口信息。例如&#xff1a; redis-cli -h <hostname> -p <port>连接成功后&#xff0c;你将看到一个类似于以下的提示符&#xff0c;表…

哪吒汽车“三头六臂”之「浩智电驱」

撰文 / 翟悦 编审 / 吴晰 8月21日&#xff0c;在哪吒汽车科技日上&#xff0c;哪吒汽车发布“浩智战略2025”以及浩智技术品牌2.0。根据公开信息&#xff0c;主编梳理了以下几点&#xff1a;◎浩智滑板底盘支持400V/800V双平台◎浩智电驱包括180kW 400V电驱系统和250kW 800…