python读取图像小工具

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

python 复制代码
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()

二、二值化图像

python 复制代码
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()

批量图像二值化

python 复制代码
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

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

python 复制代码
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)
相关推荐
databook44 分钟前
概率图模型:机器学习的结构化概率之道
python·机器学习·scikit-learn
拾回程序猿的圈圈∞1 小时前
实战二:开发网页端界面完成黑白视频转为彩色视频
python·ai编程
亚林瓜子1 小时前
AWS Elastic Beanstalk + CodePipeline(Python Flask Web的国区CI/CD)
python·ci/cd·flask·web·aws·beanstalk·codepipeline
春末的南方城市1 小时前
中山大学&美团&港科大提出首个音频驱动多人对话视频生成MultiTalk,输入一个音频和提示,即可生成对应唇部、音频交互视频。
人工智能·python·深度学习·计算机视觉·transformer
春末的南方城市1 小时前
Ctrl-Crash 助力交通安全:可控生成逼真车祸视频,防患于未然
人工智能·计算机视觉·自然语言处理·aigc·音视频
深科文库2 小时前
构建 MCP 服务器:第 4 部分 — 创建工具
python·chatgpt·prompt·aigc·agi·ai-native
witton2 小时前
美化显示LLDB调试的数据结构
数据结构·python·lldb·美化·debugger·mupdf·pretty printer
nenchoumi31192 小时前
AirSim/Cosys-AirSim 游戏开发(一)XBox 手柄 Windows + python 连接与读取
windows·python·xbox
GoodStudyAndDayDayUp2 小时前
初入 python Django 框架总结
数据库·python·django
星辰大海的精灵3 小时前
基于Dify+MCP实现通过微信发送天气信息给好友
人工智能·后端·python