计算机视觉(开运算和闭运算)

作者: zidea | 来源:发表于2019-12-27 21:40 被阅读0次
    封面

    开运算和闭运算

    腐蚀和膨胀是开运算和闭运算的基础

    开运算

    先腐蚀后膨胀的过程为开运算
    I \circ S = (I \ominus S) \oplus S

    看上去把细微连在一起的两块目标分开了


    erode_dilate.png

    对于开运算还有一个很重要的作用,就是消除暗背景下的较亮区域,目的是在不改变黑色台球面积的情况下,消除球上的白色环形区域

    def erode_dilate():
        I = cv2.imread("images/eight_ball.jpeg",0)
        # 结构元半径
        cv2.imshow("I",I)
        r = 1
        i = 1
        MAX_R,MAX_I = 20,20
        cv2.namedWindow("morphology",1)
        def nothing(*arg):
            pass
        cv2.createTrackbar("r","morphology",r,MAX_R,nothing)
        cv2.createTrackbar("i","morphology",i,MAX_I,nothing)
        while(True):
            # 显示原图
            r = cv2.getTrackbarPos('r','morphology')
            i = cv2.getTrackbarPos('i','morphology')
            print(r)
            s = cv2.getStructuringElement(cv2.MORPH_RECT,(2*r + 1,2*r+1))
            d = cv2.morphologyEx(I,cv2.MORPH_OPEN,s,iterations=i)
            cv2.imshow("morphology",d)
            k = cv2.waitKey(5)
            if k==27:
                break
        cv2.destroyAllWindows()
    
    eight_ball.jpeg 屏幕快照 2019-12-27 下午9.15.36.png 屏幕快照 2019-12-27 下午9.16.14.png

    闭运算

    与开运算的操作相反,闭运算是对图像先膨胀后腐蚀

    看上去将两个细微连接的图块封闭在一起


    dilate_erode.png

    I \bullet S = (I \oplus S) \ominus S

    目的是去掉所有骰子上的黑色区域。同样知道膨胀操作可以消除黑色,但是如果是膨胀会增大骰子的面积,而闭运算恰恰可以避免这一点,消除黑色同时不会改变骰子的面积。

    def erode_dilate():
        I = cv2.imread("images/toss_die.jpeg",0)
        # 结构元半径
        cv2.imshow("I",I)
        r = 1
        i = 1
        MAX_R,MAX_I = 20,20
        cv2.namedWindow("morphology",1)
        def nothing(*arg):
            pass
        cv2.createTrackbar("r","morphology",r,MAX_R,nothing)
        cv2.createTrackbar("i","morphology",i,MAX_I,nothing)
        while(True):
            # 显示原图
            r = cv2.getTrackbarPos('r','morphology')
            i = cv2.getTrackbarPos('i','morphology')
            print(r)
            s = cv2.getStructuringElement(cv2.MORPH_RECT,(2*r + 1,2*r+1))
            d = cv2.morphologyEx(I,cv2.MORPH_CLOSE,s,iterations=i)
            cv2.imshow("morphology",d)
            k = cv2.waitKey(5)
            if k==27:
                break
        cv2.destroyAllWindows()
    
    toss_die.jpeg 屏幕快照 2019-12-27 下午9.28.12.png

    相关文章

      网友评论

        本文标题:计算机视觉(开运算和闭运算)

        本文链接:https://www.haomeiwen.com/subject/qvhjoctx.html