python读取图像小工具

news2024/11/18 3:42:37

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

import cv2
import numpy as np
import signal
import threading
import time





if __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 time



if __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 argparse

def get_files(path):
    files = []
    for filename in os.listdir(path):
        if os.path.isfile(os.path.join(path, filename)):
            files.append(filename)
    return files


if __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)*1000
        print("二值化时间: {} ms".format(elapsed_time_init))
        print("threshold value %s" % ret)  #打印阈值,超过阈值显示为白色,低于该阈值显示为黑色s
        cv2.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 argparse

def get_files(path):
    files = []
    for filename in os.listdir(path):
        if os.path.isfile(os.path.join(path, filename)):
            files.append(filename)
    return files


if __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)*1000
        print("二值化时间: {} ms".format(elapsed_time_init))
        print("threshold value %s" % ret)  #打印阈值,超过阈值显示为白色,低于该阈值显示为黑色s
        cv2.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)*1000
        print("连通域的时间: {} ms".format(elapsed_time))

        max_area=0
        j=0
        for st in stats[1:]:
            j=j+1
            area=st[4]
            if(max_area<area):
                max_area=area
                index=j
            
        print("index",index)
        print("max_area",max_area)


        #index=index+1
        print('num_labels: ', num_labels)
        labels[labels>0] = 255
        labels = 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.coloradmin.cn/o/957338.html

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

相关文章

Android基础之Activity生命周期

Activity是Android四大组件之一、称为之首也恰如其分。 Activity直接翻译为中文叫活动。在Android系统中Activity就是我看到的一个完整的界面。 界面中看到的TextView(文字&#xff09;、Button(按钮)、ImageView&#xff08;图片&#xff09;都是需要Activity来承载的。 总…

linux免密登录最简单--图文详解

最简单的免密登录 1.A电脑生成秘钥 ssh-keygen -t rsa 2.A电脑将秘钥传给B电脑 ssh-copy-id root192.168.1.129 #将秘钥直接传给B电脑 需要输入B电脑的密码&#xff0c;可以看到成功。 3.测试 同理&#xff1a;如果B->A也需要免密登录&#xff0c;统一的操作。 大功告…

集成指挥平台定时任务故障流量分析

01故障现象 集成指挥平台中有定时任务定时传输数据到总队&#xff0c;总队定时下发数据到市交警支队。市交警支队发现定时任务一直出现执行失败的错误。市交警支队和总队联系&#xff0c;说需要市交警支队排查一下自身网络&#xff0c;前两天在应用服务器上面抓了定时任务的数…

大数据、AI和云原生:引领未来软件开发的技术演进

文章目录 **1. 数据驱动的创新&#xff1a;****2. 智能化应用的兴起&#xff1a;****3. 云原生的敏捷和可扩展性&#xff1a;****4. 实时性和即时性&#xff1a;****5. 数据隐私和安全&#xff1a;****6. 跨平台和跨设备&#xff1a;****7. 自动化和智能编程&#xff1a;****8.…

Stable Diffusion 多视图实践

此教程是基于秋叶的webui启动器 1.Stable Diffsuion 使用多视图需要准备一个多角度open pose 图 我给大家提供一个可使用的。 2.需要添加图片到到controlnet当中,不要选择预处理器,选择模型为openpose的模型,然后需要点选同步图片尺寸。 3.然后填写关键字可以参照一下这个…

IBM Spectrum LSF Explorer 为要求苛刻的分布式和任务关键型高性能技术计算环境提供强大的工作负载管理

IBM Spectrum LSF Explorer 适用于 IBM Spectrum LSF 集群的强大、轻量级报告解决方案 亮点 ● 允许不同的业务和技术用户使用单一解决方案快速创建和查看报表和仪表板 ● 利用可扩展的库提供预构建的报告 ● 自定义并生成性能、工作负载和资源使用情况的报…

设计模式-适配器

文章目录 一、简介二、适配器模式基础1. 适配器模式定义与分类2. 适配器模式的作用与优势3.UML图 三、适配器模式实现方式1. 类适配器模式2. 对象适配器模式3.类适配器模式和对象适配器模式对比 四、适配器模式应用场景1. 继承与接口的适配2. 跨平台适配 五、适配器模式与其他设…

无涯教程-Python机器学习 - Extra Trees函数

它是袋装决策树集成方法的另一种扩展。在这种方法中,从训练数据集的样本中构建随机树。 在以下Python食谱中,我们将通过在Pima Indians糖尿病数据集上使用sklearn的ExtraTreesClassifier类来构建额外的树集成模型。 首先,导入所需的软件包,如下所示: from pandas import rea…

Nginx详解 三:高级配置

文章目录 1. 网页的状态页2. Nginx第三方模块2.1 echo模块 3. 变量3.1 内置变量3.1.1 示例 3.2 自定义变量3.2.1 自定义访问日志3.2.2 自定义json 格式日志 3.4 Nginx压缩功能 4. HTTPS4.1 Nginx的HTTPS工作原理4.2 启用功能模块的配置过程 5、自定义图标 1. 网页的状态页 基于…

江苏移动基于OceanBase稳步创新推进核心数据库分布式升级

*本文首发自《中国电信业》 数字经济时代&#xff0c;数据库作为企业核心数据存储、处理、挖潜等方面的关键载体&#xff0c;重要性日益凸显。对于运营商而言&#xff0c;数据库具有行业用户数量多、访问数量多、业务复杂度高、数据安全性高、响应要求性高以及需要 7*24 小时服…

【组合计数 or 树DP】2021 icpc 上海 G

Problem - G - Codeforces 题意&#xff1a; Code&#xff1a; #include <bits/stdc.h>#define int long longusing namespace std;const int mxn1e610; const int mxv1e610; const int mod998244353;vector<int> G[mxn];int N,u,v; int ans1; int sz[mxn];void…

手把手教你写出第一个C语言程序

Hello, World! 1. 前言2. 准备知识2.1 环境2.2 文件的分类2.3 注释2.3.1 注释的作用2.3.2 注释的两种风格2.3.2.1 C语言的注释风格2.3.2.2 C的注释风格 2.3.3 VS中注释和取消注释的快捷键 3. 开始演示3.1 创建项目3.2 创建源文件3.3 写代码3.4 编译链接运行 4. 代码解释4.1 写主…

Apipost:API文档、调试、Mock与测试的一体化协作平台

随着数字化转型的加速&#xff0c;API&#xff08;应用程序接口&#xff09;已经成为企业间沟通和数据交换的关键。而在API开发和管理过程中&#xff0c;API文档、调试、Mock和测试的协作显得尤为重要。Apipost正是这样一款一体化协作平台&#xff0c;旨在解决这些问题&#xf…

QT 使用信号与槽实现界面跳转

一、创建一个新的页面 1 > 在原有工程上新建一个页面 2 > 选择Qt - Qt 设计师界面类 - choose 3 > 选择Widget模板 - 下一步 4 > 输入自定义类名 - 下一步 会自动生成其同名的.h .cpp .ui文件 5 > 最终效果 Headers存放.h文件 Soueces存放.cpp文件 Forms存放.u…

unity 之参数类型之引用类型

文章目录 引用类型引用类型与值类型的差异 引用类型 在Unity中&#xff0c;引用类型是指那些在内存中存储对象引用的数据类型。以下是在Unity中常见的引用类型的介绍&#xff1a; 节点&#xff08;GameObject&#xff09;&#xff1a; 在Unity中&#xff0c;游戏对象&#xff…

学习 使用pandas库 DataFrame 使用

1 、 数据排序 sort_values()函数 by:要排序的名称或名称列表&#xff0c; sorted_df df.sort_values(byAge,ascendingFalse) 由大到小排序&#xff1b; sorted_df df.sort_values(byAge) 由小到大排序&#xff1b; # 创建一个示例数据帧 data {Name: [Tom, Nick, John…

9.嵌套路由

1.添加主路由main <template><div><!-- 页面布局 --><el-container><!-- 侧边栏 --><el-aside width"200px">Aside</el-aside><!-- 页面布局 右边 包括header 和main --><el-container><el-header>Head…

08:STM32----DMA数据转运

目录 1:简历 2:存储器映像 3:DMA基本结构 4: DMA转运的条件 5:DMA请求 A:DMA数据转运 1:连接图 2:数据转运DMA 3:函数介绍 4:步骤 5:代码 B:DMAAD多通道 1:连接图 2:结构图 3:函数介绍 4:代码 1:简历 DMA&#xff08;Direct Memory Access&#xff09;直接存储…

讲讲几道关于 TCP/UDP 通信的面试题

TCP &#xff08;1&#xff09;TCP 的 accept 发生在三次握手的哪个阶段&#xff1f; 如下图connect和accept的关系&#xff1a; accept过程发生在三次握手之后&#xff0c;三次握手完成后&#xff0c;客户端和服务器就建立了tcp连接并可以进行数据交互了。这时可以调用accep…

每日一题(链表的中间节点)

每日一题&#xff08;链表的中间节点&#xff09; 876. 链表的中间结点 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 如下图&#xff1a;可以定义两个结构体指针均从链表的头节点开始向后遍历&#xff0c;fast指针一次走两步&#xff0c;slow指针一次走一步&a…