zoukankan      html  css  js  c++  java
  • createTrackbar

    import cv2
    import numpy as np
    #载入图片
    #img_original=cv2.imread('1110_3_1_X_537_Y_1700_qly_100_fail_13d17h46m24s.bmp',0)
    img_original=cv2.imread('1141_1_1_X_551_Y_1701_qly_100_pass_subtpl_25_update_1153677968_13d17h53m10s.bmp',0)
    h,w=img_original.shape
    img_original=cv2.resize(img_original,(3*w,3*h))
    rangecolorimg=img_original.copy()
    #设置窗口
    cv2.namedWindow('Canny')
    cv2.namedWindow('morphed')
    cv2.namedWindow('colorRange')
    #定义回调函数
    def nothing(x):
        pass
    #创建两个滑动条,分别控制threshold1,threshold2
    cv2.createTrackbar('threshold1','Canny',50,100,nothing)
    cv2.createTrackbar('threshold2','Canny',100,100,nothing)
    cv2.createTrackbar('morph','morphed',5,20,nothing)
    cv2.createTrackbar('range1','colorRange',0,255,nothing)
    cv2.createTrackbar('range2','colorRange',100,255,nothing)
    cv2.createTrackbar('replacevalue','colorRange',120,255,nothing)
    while(1):
        #返回滑动条所在位置的值
        rangecolorimg=img_original.copy()
        blackcolorimg=img_original.copy()
        threshold1=cv2.getTrackbarPos('threshold1','Canny')
        threshold2=cv2.getTrackbarPos('threshold2','Canny')
        range1=cv2.getTrackbarPos('range1','colorRange')
        range2=cv2.getTrackbarPos('range2','colorRange')
        replacevalue=cv2.getTrackbarPos('replacevalue','colorRange')
        maskrange=np.zeros_like(img_original)
        blackrange=np.ones_like(img_original)*255
        x1=img_original[img_original>range1]
        x2=img_original[img_original<range2]
        #x3=(img_original>range1)&(img_original<range2)
        x3 = cv2.inRange(img_original, range1, range2)
        import pdb
        #pdb.set_trace()
        #x3=cv2.bitwise_and(x1, x2)
        #bitwise_and
        #rangecolorimg[x3]=255
       
        rangecolorimg[x3!=0]=replacevalue
        blackmask = 255 * np.ones(rangecolorimg.shape, rangecolorimg.dtype)
        #blackmask=src_mask
        width, height = img_original.shape
        center = (int(height/2), int(width/2))
        seamlessCloneimg=rangecolorimg
        #seamlessCloneimg = cv2.inpaint(seamlessCloneimg, x3, 10, cv2.INPAINT_NS)#cv2.INPAINT_NScv2.INPAINT_TELEA
       
        seamlessCloneimg = cv2.seamlessClone(cv2.cvtColor(img_original, cv2.COLOR_GRAY2BGR) ,cv2.cvtColor(rangecolorimg, cv2.COLOR_GRAY2BGR) , blackmask, center, cv2.MIXED_CLONE)   
        blackrange[x3!=0]=blackcolorimg[x3!=0]
        normalizeimg = np.zeros(blackrange.shape, dtype=np.float32)
        cv2.normalize(np.float32(rangecolorimg), dst=normalizeimg, alpha=1.0, beta=0, norm_type=cv2.NORM_MINMAX)   
        #Canny边缘检测
        img_edges=cv2.Canny(img_original,threshold1,threshold2)
        #显示图片
        img=img_edges
        morphradius=cv2.getTrackbarPos('morph','morphed')
        kernel   = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (morphradius,morphradius))
        morphed  = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
        contours,_ = cv2.findContours(morphed, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        import pdb
        #pdb.set_trace()
        rgbmorphed=cv2.cvtColor(morphed, cv2.COLOR_GRAY2BGR)   
        # for i in range(len(contours)):
            # #cv2.drawContours(immask,[contours[i]],-1,(x+np.random.randint(0, 30),x+np.random.randint(0, 30),x+np.random.randint(0, 30)),cv2.FILLED)
            # cv2.drawContours(rgbmorphed,[contours[i]],-1,(0,255,0),cv2.FILLED)
        cv2.drawContours(rgbmorphed,contours,-1,(255,255,255),cv2.FILLED)       
        import pdb
        #pdb.set_trace()
        if(0):
            cv2.imshow("morphed2",morphed)
            cv2.imshow("morphed",morphed)
            cv2.imshow('Canny',img_edges)
            cv2.imshow('rgbmorphed',rgbmorphed)
        #cv2.waitKey(0)   
        cv2.imshow("colorRange",rangecolorimg)
        cv2.imshow("x3",x3)
       
        cv2.imshow("blackrange",blackrange)   
        cv2.imshow('normalizeimg',np.uint8(normalizeimg*255))
        #cv2.waitKey(0)    
       
        cv2.imshow('original',img_original)
       
        cv2.imshow('seamlessCloneimg',seamlessCloneimg)    
        if cv2.waitKey(1)==ord('q'):
            break
    cv2.destroyAllWindows()
     
  • 相关阅读:
    【阿里的感悟】质量该如何做? .(转载)
    java linux 配置环境
    Spring Bean属性绑定Bean返回值
    Spring BeanNameAutoProxyCreator 与 ProxyFactoryBean
    Spring Aop之(二)Aop 切面声明和通知
    Ubuntu开机自动启动Script
    转战博客园!
    linux 系统管理11 ——系统安全及应用
    linux awk
    Rsync数据同步工具
  • 原文地址:https://www.cnblogs.com/skydaddy/p/11698362.html
Copyright © 2011-2022 走看看