当前位置: 首页 > article >正文

opencv 自适应阈值

需要安装扩展库 opencv-contrib-python

CV_class.py

import cv2
import numpy as np
#import serial
import os,sys
from datetime import datetime
import _thread
import threading





import time


import win32ui#只有windows能用.
#from CV_class import *

def p(x=""):
    print(x) 
def pt(x="",x1=None):
    p(f" {x} :{type(x1)}>{x1}") 
def pf(x):
    for i in x:
        p(f"{i}")
def cmd(s="pause"):
    os.system(s)



def thread_it(func, *args):#传入函数名和参数
    t = threading.Thread(target=func, args=args)
    t.setDaemon(True)
    t.start()
    
r""" 
import clr
import System
from System import String, Char, Int32,UInt16, Int64, Environment, IntPtr
print(f"{clr.AddReference('System')}")
def tim(x1=1,x2=1):#定时器事件这个函数一定要有且只能有两个参数;否则报错;
    print(f"定时器事件{time.time()}")
   
def Winform_timer(itimer=500):
    t = System.Timers.Timer(itimer);
    t.Elapsed += System.Timers.ElapsedEventHandler(tim);#到达时间的时候执行事件;
    t.AutoReset = True;#设置是执行一次(false)还是一直执行(true);
    t.Enabled = True;#是否执行System.Timers.Timer.Elapsed事件;
"""














    

def getfilepath(path=f'{os.getcwd()}'):
    dlg =win32ui.CreateFileDialog(1)
    dlg.SetOFNInitialDir(path)
    dlg.DoModal()
    filename=dlg.GetPathName();#
    return filename


def CV_Getimg(picpath,x2=1):
    All_Suffix_Name= (".jpg",".JPG",".bmp",".BMP",".png",".PNG")
    for S in All_Suffix_Name:#检查后缀名
        RRR=os.path.splitext(picpath)[-1] == f"{S}";
        if RRR==True:
            try:#打开一个可以含有中文路径的图片文件.""""""
                return cv2.imdecode(np.fromfile(picpath,dtype=np.uint8),x2)
            except:
                print("不支持打开此图片.")
                return np.zeros((1,1,1),dtype="uint8")
    print("不是有效后缀名.")
    return np.zeros((1,1,1),dtype="uint8")    
##result=True;    
#用法 img=CV_Getimg(getfilepath())

def CV_Saveimg(img,Name=f"{str(datetime.now().strftime('%Y-%m-%d-%H_%M_%S'))}.jpg",path=""):
    if path!="":#没有检查路径是否合法.
        path=path+"\\" 
    try:#保存一个可以含有中文路径的图片文件.""""""
        cv2.imencode('.jpg', img)[1].tofile(f"{path}{Name}")
        print("Save Done!")
        return True
    except:
        print("不能保存此图片!")
        return False
#用法:CV_Saveimg(img,path=rf"{os.getcwd()}\保存的图")



def CV_imshow(x1,frame):
    cv2.namedWindow(x1,flags=cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO | cv2.WINDOW_GUI_EXPANDED)
    cv2.imshow(x1,frame)
    return 0
    
    
    
def CV_flip(frame, flipCode):
    ## 图片镜像
    # * 水平翻转 flipCode = 1
    # * 垂直翻转 flipCode = 0
    # * 同时水平翻转与垂直翻转 flipCode = -1
    return cv2.flip(frame, flipCode)
    
def CV_BGR2GRAY(frame):
    #将BGR彩图变换为灰度图
    return cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    
def TKC2RGB(color='#000000'):
    return (int(f'0x{color[1:3]}',16),int(f'0x{color[3:5]}',16),int(f'0x{color[5:]}',16))
#TKColor2RGB()
def TKC2BGR(color='#000000'):
    return (int(f'0x{color[5:]}' , 16),int(f'0x{color[3:5]}', 16),int(f'0x{color[1:3]}', 16))
#TKColor2BGR()





def img(picpath="Lena.jpg",x2=1):
     return CV_Getimg(picpath,x2)
     


    
def CV_shape(img):
    i=0
    for x in img.shape:
        i=i+1
    if i==3:
        rows,cols,ch=img.shape
    if i==2:
        ch=1
        rows,cols=img.shape

    """
    p(f"像素:{img.shape} 行,列,通道 (512,512,3)")#
    p(f"像素:{img.size}")
    p(f"图像的数据类型:{img.dtype}")
    
    类型,像素数目,(行,列,通道)                            """      
    return img.dtype,img.size,(rows,cols,ch)
    
def SHOW(img,n="img"):
    cv2.namedWindow(n,flags=cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO | cv2.WINDOW_GUI_EXPANDED)
    cv2.moveWindow(n,0,0);#不能在循环里面否则会锁住窗口位置     HWT=CV_shape(img)
    cv2.resizeWindow(n,200,200)#不能在循环里面,否则会锁住窗口大小.
    while(1):
        cv2.imshow(n,img)
        if cv2.waitKey(1)&0xFF==27:#按"ESC|退出键关闭窗口"
            break
    cv2.destroyWindow(n)#关闭自己.      
#--------------------------------------------------------------------------



    
    
    
    
    
    
    
      

主程序.py





import cv2
import numpy as np
#from matplotlib import pyplot as plt
import copy
from CV_class import *

#img = cv2.imread('1.bmp', 0)
img=CV_Getimg(getfilepath(),0) 
imgbak=copy.deepcopy(img)#备份图

img = cv2.medianBlur(img, 5)#中值滤波medianBlur

ret, th1 = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY)

_,thhh=cv2.threshold(img, 254, 255, cv2.THRESH_BINARY)
thhh = cv2.medianBlur(thhh, 5)

_,thll=cv2.threshold(img, 0, 1, cv2.THRESH_BINARY)





th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)#MEAN
th3 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)#GAUSSIAN

bitwiseAnd = cv2.bitwise_and(th1, th2)
And23 = cv2.bitwise_and(th2, th3)










"""
And23 = cv2.bitwise_and(th2, th3)
bitwiseOr = cv2.bitwise_or(rectangle, circle)
bitwiseXor = cv2.bitwise_xor(rectangle, circle)
bitwiseNot = cv2.bitwise_not(circle)
"""
titles = ['img', 'th1',
          'th2', 'th3',"bitwiseAnd","and23","thhh","thll"]
images = [img, th1, th2, th3,bitwiseAnd,And23,thhh,thll]


#for i in range(len(images)):
#    plt.subplot(3, 3, i + 1), plt.imshow(images[i], 'gray')
#    plt.title(titles[i])
#    plt.xticks([]), plt.yticks([])
#plt.show()



#cmd()

cv2.imshow(titles[0], images[0])
cv2.imshow(titles[1], images[1])
cv2.imshow(titles[2], images[2])
cv2.imshow(titles[3], images[3])
cv2.imshow(titles[4], images[4])
cv2.imshow(titles[5], images[5])







cv2.waitKey(0)



http://www.kler.cn/a/559074.html

相关文章:

  • 蓝桥杯定时器实现led闪烁
  • 每日一题——主持人调度(二)
  • 开源RAG主流框架有哪些?如何选型?
  • NI Multisim仿真实现39计数器
  • 【c++】string类详解
  • 课程分享 | 安全系统建设的挑战与解决方案
  • 周末总结(2024/02/22)
  • Linux的目录结构
  • C++ 设计模式-迭代者模式
  • 代码随想录day19
  • 基于大模型的 SDL 需求阶段安全需求挖掘实战指南 —— 四步法实现从业务需求到风险矩阵的智能转换
  • Git版本控制系统---本地操作(万字详解!)
  • ROS2机器人开发--服务通信与参数通信
  • 【Git】远程操作
  • Spring Boot嵌入式服务器深度解析:从配置到调优的全方位指南
  • 本地部署AI模型 --- DeepSeek(一)
  • R包的作用及安装指南
  • FTP 实验(ENSP模拟器实现)
  • 视觉分析之边缘检测算法
  • androidnetflix手机版遥控器操作