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)
相关推荐
麻雀飞吧4 小时前
先判断工具用来学习、开发还是执行
人工智能·python
人邮异步社区4 小时前
学习Python的最佳学习路径是什么?
python·程序员
troy1287 小时前
Python 基础语法(九):Django/Flask/FastAPI 三大 Web 框架详细对比解析
python·jupyter·django·flask·github·fastapi
jzshmyt7 小时前
我用 Python 从零“生成“了一个宇宙,然后让它观察自己(v14)
人工智能·pytorch·python·numpy·matplotlib·空间计算·scipy
用户8356290780519 小时前
使用 Python 将 DOCX 转换为 Markdown
后端·python
小玮看世界9 小时前
[Python]ADAS工程实战(三):多传感器扇区统计疑难点全解——归一化、跨边界、去重与置信度
python
TomEval10 小时前
【测AI】第02篇:Python 环境搭建与基础语法速通
人工智能·python·功能测试·aigc
归去来 兮10 小时前
LangChain从入门到精通
python·langchain·langgraph
淘气的小猴子11 小时前
Python 魔术方法入门
python
我要见SA姐111 小时前
DeepSeek Harness 开源贡献手记:从 Issue 到 Merge 的完整旅程
ide·vscode·python·自动化·编辑器