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.hqwc.cn/news/97230.html

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

相关文章

linux编程--进程--进程相关概念

5个问题了解进程&#xff1a; 什么是程序&#xff0c;什么是进程&#xff0c;有什么区别如何查看系统中有哪些进程&#xff1f;什么是进程标识符&#xff1f;什么叫父进程&#xff0c;什么叫子进程&#xff1f;c程序的存储空间是如何分配的&#xff1f; 1.程序是静态的概念&a…

解释基本的3D理论

推荐&#xff1a;使用 NSDT场景编辑器 快速搭建3D应用场景 坐标系 3D 本质上是关于 3D 空间中形状的表示&#xff0c;并使用坐标系来计算它们的位置。 WebGL 使用右侧坐标系 — 轴指向右侧&#xff0c;轴指向上方&#xff0c;轴指向屏幕外&#xff0c;如上图所示。xyz 对象 …

el-dialog设置高度、使用resetFields清除表单项无效问题

初学者容易踩坑的的el-dialog、el-form问题 1. el-dialog设置高度2. el-form中表单项对不齐3. 使用resetFields清除表单项无效 1. el-dialog设置高度 在el-dialog中里面添加一个div设置固定高度&#xff0c;或者限制最小的高度。 <el-dialogtitle"选择图标"v-mod…

鲁棒优化入门(7)—Matlab+Yalmip两阶段鲁棒优化通用编程指南(下)

0.引言 上一篇博客介绍了使用Yalmip工具箱求解单阶段鲁棒优化的方法。这篇文章将和大家一起继续研究如何使用Yalmip工具箱求解两阶段鲁棒优化(默认看到这篇博客时已经有一定的基础了&#xff0c;如果没有可以看看我专栏里的其他文章)。关于两阶段鲁棒优化与列与约束生成算法的原…

Opencv手工选择图片区域去水印

QT 插件化图像算法研究平台的功能在持续完善&#xff0c;补充了一个人工选择图片区域的功能。 其中&#xff0c;图片选择功能主要代码如下&#xff1a; QRect GLImageWidget::getSeleted() {QRect ajust(0,0,0,0);if(image.isNull() || !hasSelection)return ajust;double w1…

【kubernetes系列】Calico原理及配置

概述 Calico是针对容器&#xff0c;虚拟机和基于主机的本机工作负载的开源网络和网络安全解决方案。 Calico支持广泛的平台&#xff0c;包括Kubernetes&#xff0c;OpenShift&#xff0c;Docker EE&#xff0c;OpenStack和裸机服务。 Calico在每个计算节点都利用Linux Kernel实…

飞书接入ChatGPT,实现智能化问答助手功能,提供高效的解答服务

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话&#xff0c;在下面操作步骤中…

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书南京师范大学图书馆

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书南京师范大学图书馆

Android片段

如果你希望应用根据不同的环境有不同的外观和行为&#xff0c;这种情况下就需要片段&#xff0c;片段是可以由不同活动重用的模块化代码组件。 片段&#xff08;Fragment&#xff09;是活动&#xff08;Activity&#xff09;的一种模块化部分&#xff0c;表示活动中的行为或界面…

基于串口校时的数字钟设计

文章目录 设计目标硬件设计数码管串口 软件设计顶层模块串口接收模块数据处理模块时钟模块串口发送模块 总结 设计目标 环境&#xff1a;ACX720开发板 实现功能&#xff1a; 数码管能够显示时分秒能够接收串口数据修改时间能够将当前时间以1s一次速率发送到电脑 硬件设计 数…

Midjourney学习(一)prompt的基础

prompt目录 sd和mj的比较prompt组成风格表现风格时代描述表情色彩情绪环境 sd和mj的比较 自从去年9月份开始&#xff0c;sd就变得非常或火&#xff0c;跟它一起的还有一个midjourney。 他们就像是程序界的两种模式&#xff0c;sd是开源的&#xff0c;有更多的可能性更可控。但是…

Linux之基于HTTPS的静态网站

目录 Linux之基于HTTPS的静态网站 定义 SSL协议 使用Apachemod_ssl组件的加密认证网站 mod_ssl模组 安装 配置文件 ssl配置文件的主要参数 案例 案例1 --- 搭建HTTPSSL的加密认证的web服务器 案例2 --- 组建多个子目录的网站www.joker.com&#xff0c;该网站下有2个子…